我有一个文件夹结构,如下所示:
- 论坛
- .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 规则。