我有一个PHP文件的网站,我在SiteGround.com上托管,并希望链接看起来像“example.com/about”而不是“example.com/about.php”。当我访问“example.com”而不是“example.com/index”时,我也希望加载index.php
所以我做了一些搜索,这就是我想要的:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
但是网络服务器已经有一个默认的.htaccess
文件,其中包含:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule . /index.php [L]
</IfModule>
好的......所以我试着把它正在做的事情拼凑起来。根据我的理解,它启用了RewriteEngine,然后将RewriteBase设置为/
。然后,它会设置一个查找index.php
的规则,如果找到它,则不会检查任何其他规则。
否则,它会通过并检查字符串是不是文件而不是目录并且包含.php
扩展名,它会将根重定向到index.php
并停止。
所以,我尝试在结束</IfModule>
标记之前将我的三行添加到块的末尾,但它并没有完全奏效。任何人都可以帮助我吗?
修改
我修改了我的.htaccess
文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php
</IfModule>
在我的HTML中,我有:
<a href="about" .... ></a> <!-- link to about.php -->
<a href="/" ....></a> <!-- link to index.php -->
是吗?它似乎对我不起作用。
答案 0 :(得分:1)
首先,行:
RewriteCond %{REQUEST_FILENAME}\.php -f
不是原始.htaccess
文件的一部分。它不可能,它没有任何意义,也许你在实验时自己添加它。
除了该行之外,您所拥有的.htaccess
文件是将所有内容放在index.php
之内的标准方法。可能是WordPress。所以你需要决定你想做什么。是否要将所有内容都放在index.php
之内,或者是否要使用在服务器端添加扩展名的单独.php
文件?或者你想两个都做? (在这种情况下,组合方法需要写作)你还在使用WordPress吗?也许你可以删除这些规则。
如果您需要更多信息,请告诉我,我可以更新答案。
<强>更新强>
您的规则可以修改为:
RewriteEngine On
RewriteCond %{REQUEST_URI} !\.php$
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L,NE]
应该修复它,我认为\.
行上的REQUEST_FILENAME
打破了它,剩下的就是改进了。
如果这不起作用,则可能未启用mod_rewrite,或者未启用.htaccess
个文件。您可以通过在一行上放一些垃圾来测试它,看看是否有500错误。
如果root不提供index.php,那么您只需要添加DirectoryIndex
。