2011-05-06 42 views
0

我有一个的mod_rewrite规则是这样的: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。

为什么它这样做,是否有任何方法来防止它(除了没有这样的目录撒谎)?

+0

移到serverfault? – QuantumMechanic 2011-05-06 05:22:39

+0

@QuantumMechanic:我认为首先将它发布在那里,但SO有3716个标记为mod-rewrite的问题,而SF只有578个。当然,受欢迎程度并没有使事情正确,但根据我的经验,重写规则是问题的程序员,而不是系统管理员。 – 2011-05-06 05:30:03

回答

0

它似乎是由/?最后 - 删除?原因(当爱丽丝目录存在):

  • /艾丽斯被重定向到/爱丽丝/,并显示为/bob.php?page=alice
  • /艾丽斯/显示为/bob.php? page = alice

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

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

感谢您的回复。但是,我确实希望http:// localhost/alice显示bob.php,我只是不希望它改变URL。我编辑了我的问题来澄清这一点。 – 2011-05-06 07:23:35