Mod Rewrite - 导致内部重定向

时间:2012-08-15 15:48:59

标签: php apache .htaccess

我正在尝试创建一个RewriteRule,如下所示;

RewriteCond %{HTTP_HOST} ^dev$ [NC]
RewriteRule ^(.*)$ test/$1 [L]

当有人输入http://dev/index.php时,实际上将检索的文件为http://dev/test/index.php

然而,这似乎会导致内部重定向的负载。

有人帮忙吗?

1 个答案:

答案 0 :(得分:2)

添加

RewriteCond %{REQUEST_URI} !^/?test

...在第一个RewriteCond之前。

重写规则上的[L]标志(略有反直觉)导致重写过程再次从顶部开始。您的当前规则将在每次迭代时匹配,并且mod_rewrite将进入无限循环。添加上面的RewriteCond意味着它只会在第一次迭代时匹配。

如果您在Apache 2.3.9或更高版本上运行,则可以在重写规则而不是[END]上使用[L]标志 - 这将导致mod_rewrite立即退出并避免此问题。如果可用,这实际上是更好的解决方案,因为上述RewriteCond会阻止您的规则适用于以test合法开头的网页。