了解我的.htaccess文件,以便将X重写为X.php

时间:2017-06-21 04:51:22

标签: .htaccess mod-rewrite

我有一个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 -->

是吗?它似乎对我不起作用。

1 个答案:

答案 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