mod_rewrite,其中重写规则与目录匹配

时间:2011-05-06 05:15:08

标签: apache mod-rewrite url-rewriting

我有一个像这样的mod_rewrite规则:

RewriteRule ^(alice)/?$ bob.php?page=$1 [L]

如果我去http://localhost/alice/,它会读取bob.php(如预期的那样)。如果我转到http://localhost/alice(没有结束斜杠),它会读取bob.php(再次,如预期的那样)。

如果我在htdocs中创建一个名为“alice”的目录,并转到http://localhost/alice/,它会读取bob.php。但是,如果我转到http://localhost/alice,它现在会重定向到http://localhost/alice/?page=alice。它仍然读取bob.php(这是我想要的),但我宁愿不改变这样的URL。

为什么会这样做,有没有办法阻止它(除了没有这些目录之外)?

2 个答案:

答案 0 :(得分:0)

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(alice)/?$ bob.php?page=$1 [L]

答案 1 :(得分:0)

这似乎是由/引起的?最后 - 删除?原因(当alice目录存在时):

  • / alice将被重定向到/ alice /,并显示为/bob.php?page=alice
  • / alice /显示为/bob.php?page=alice

如果alice目录不存在,/ alice将不会被重定向(但/ alice /将是)。如果您知道目录是否存在,则可以选择是否使用/或/?.