htaccess重写 - 现有文件上的404

时间:2013-02-25 05:59:03

标签: apache .htaccess rewrite

所以我在htaccess文件中进行了以下重写:

RewriteRule ^([^/.]+)/?$ index.php?page=$1 [L]

每当我尝试转到http://domain/index时,我都会收到404,但是当我尝试转到http://domain/index.甚至是http://domain/a之类的不存在页面时,重写工作正常和index.php var_dump()是适当的值。

index.php中唯一的代码是var_dump($_GET);,所以我知道这不是php问题。

有人可以向我解释我的重写规则有什么问题,并解释如何修复它?

修改 我忘了我启用了错误日志记录。它一直保存到error.log的错误是:

[Sun Feb 24 21:01:18 2013] [error] [client 192.168.1.1] Negotiation: discovered file(s) matching request: /path/public_html/index (None could be negotiated).

2 个答案:

答案 0 :(得分:3)

由于错误,似乎启用了MultiViews。

您可以在文件顶部试试:

Options +FollowSymlinks -MultiViews

此外,我建议如下:

# Prevent loops
RewriteCond %{REQUEST_URI} !index\.php [NC]
RewriteRule ^([^/]+)/? index.php?page=$1 [L] 

MultiViews提供Content Negotiation,最佳描述here

答案 1 :(得分:1)

启用MultiViews后,Content Negotiation模块会查找与Options +MultiViews匹配的文件,但index个文件不符合条件对于匹配,所以它与.php失败。您可以使用以下方法将None could be negotiated处理程序添加为匹配项:

.php

MultiviewsMatch中所述。