mod_rewrite:奇怪的infinit循环

我有一个文件夹结构,像这样:

  • 论坛
    • 的.htaccess
    • [更多文件]
  • forum_english
    • 的.htaccess
    • [更多文件]

论坛/ .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-File 。

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

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

任何想法我做错了什么?

如果用户通过.com或.net到达,他们可能会继续这样做,如果你已经重写请求到一个相对的位置,如你的例子所示。 换句话说, HTTP_HOST条件将始终为真。

.*正则expression式相当于“匹配(几乎)任何字符0次或更多次”,而^ (string开始)和$ (string结束)标记在这里不会做任何特别的事情,因为匹配。 因为该模式将有效匹配任何string,重写为../forum_english后的结果path也将匹配。

本质上,redirect循环的发生是因为你保证两个条件始终为真。

我认为你应该考虑一下确定的条件,这些条件表明需要重写。 用户redirect之前(但不是之后)会发生什么样的模式? 一旦你find了这些条件,那么你可以研究如何创build合适的mod_rewrite规则。