所以我在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).
答案 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
中所述。