mod_rewrite:奇怪的无限循环

mod_rewrite:奇怪的无限循环

我有一个文件夹结构,如下所示:

  • 论坛
    • .htaccess
    • [更多文件]
  • 论坛_英语
    • .htaccess
    • [更多文件]

forum/.htaccess 如下所示:

RewriteEngine on

RewriteCond %{HTTP_HOST} \.(com|net)$ [NC] # just rewrite if the query comes from an english languaged domain
RewriteRule ^(.*)$ ../forum_english/$1

#some more RewriteRules from another forum. I don't know, if I am allowed to show them. They should work well, side by side.

forum_english/.htaccess 是默认值MyBB-htaccess 文件

遗憾的是,这会导致无限循环。为了防止这种情况,我必须插入一个[L]-Flag 来跳过 forum_english/.htaccess 文件(但此文件中的规则也应执行!)。我也尝试过 -Flag[N=2]来代替……但仍然是无限循环。

我使用 Apache 2.2.17,无法访问 error_logs 或 /etc/apache2/sites-enabled/ 中的文件。

知道我做错了什么吗?

答案1

如果用户通过 .com 或 .net 访问,那么在您将请求重写为相对位置(如示例中所示)后,他们可能会继续这样做。换句话说,条件HTTP_HOST将始终为真。

正则表达式.*相当于“匹配(几乎)任何字符 0 次或更多次”,并且^(字符串开头)和$(字符串结尾)标记在这里不会为您做任何特殊的事情,因为两者之间的所有内容都会被匹配。因为模式将有效地匹配任何字符串,所以重写为 之后的结果路径../forum_english也将匹配。

本质上,重定向循环的发生是因为您保证两个条件始终为真。

我认为您应该考虑一下表明需要进行重写的明确条件。在用户被重定向之前(而不是之后)会出现哪些模式?一旦您弄清楚了这些条件,您就可以研究如何创建适当的 mod_rewrite 规则。

相关内容