我在.htaccess文件中有以下mod_rewrite指令,因此像http://example.com/foo/bar/baz这样的网址会在内部重写为index.php?page = baz
RewriteEngine on
RewriteBase /foo/bar/
RewriteRule ^index.php - [L,NC]
RewriteRule ^([^/]*)/?$ index.php?&p=$1 [L,QSA]
RewriteRule ^([^/]*)/([^/]*)/?$ index.php?&p=$1&v=$2 [L,QSA]
工作正常
以及我抛出的任何其他内容,除非第一个参数是索引。
我已将RewriteLogLevel调高至9,当我访问http://example.com/foo/bar/index/baz
时,我会收到类似这样的条目[perdir ..../foo/bar/] add path info postfix: ..../foo/bar/index.php -> ..../foo/bar/index.php/baz
所以看起来apache的内部实际上是在mod_rewrite甚至看到它之前将URL的/ index /部分重写到/index.php/,这有点问题。它不会错误地重写任何其他内容,只需索引。
我真的不明白为什么它不会使用索引,但会使用其他所有功能。这些是该项目唯一的重写指令,否则就是股票设置。
这是Apache 2.2.21和PHP 5.3.8。
我希望我很清楚,但为了以防万一,我希望网址重写如下:
除了带索引的网址外,一切正常。
答案 0 :(得分:1)
尝试将Options -MultiViews
添加到您的htaccess,以防止与index.php
冲突