当url string是现有文件的名称时,mod_rewrite不起作用

时间:2017-08-13 08:03:48

标签: php regex apache .htaccess mod-rewrite

我想要做的是删除网址所需的php文件扩展名

即。 myipaddress / abc - > myipaddress / abc.php

但是我似乎无法使用this link中的解决方案来使用mod_rewrite。

我的.htaccess文件包含以下行:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1c.php [L]

因此,如果我的服务器上有一个名为abc.php的文件,而浏览器中的我的网址是" myipaddress / ab",则会正确显示abc.php。无法找到的任何文件都会返回内部服务器错误(因为第三个cond已被注释掉)。

在这种情况下,我可以使用它:

myipaddress / ab - > myipaddress / abc.php

现在,如果我像这样更改最后一行(这是提供的答案):

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L]

现在,如果我有一个名为abc.php的文件并且我放入myipaddress / abc,我会找到一个未找到404的文件

Not Found

The requested URL /abc was not found on this server.

如果我查找其他链接,例如abcd.php,这不在我的服务器上,我仍然会收到500内部服务器错误。但是,当我尝试像myipaddress / name这样的链接,如果name.php在我的服务器上,我得到404.我很惊讶如果url包含name,mod_rewrite将不会重写url并且有花了好几个小时。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

听起来您在系统上启用了自动内容协商。你想禁用它。

查看文档。它编写得很好,并附带了许多很好的例子:

http://httpd.apache.org/docs/current/content-negotiation.html