mod_rewrite做错了索引

时间:2012-03-14 06:22:32

标签: apache mod-rewrite

我在.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。


我希望我很清楚,但为了以防万一,我希望网址重写如下:

  • / foo / bar / index - > /foo/bar/index.php?page=index
  • / foo / bar / index / - > /foo/bar/index.php?page=index
  • / foo / bar / page1 - > /foo/bar/index.php?page=page1
  • / foo / bar / page2 / word - > /foo/bar/index.php?page=page2&v=word

除了带索引的网址外,一切正常。

1 个答案:

答案 0 :(得分:1)

尝试将Options -MultiViews添加到您的htaccess,以防止与index.php冲突