htaccess - 重定向循环

时间:2012-02-02 06:54:17

标签: .htaccess mod-rewrite

为什么会导致重定向循环?

Options +FollowSymlinks
RewriteEngine on
RewriteBase /summary/1/document/

RewriteRule !^[a-z]{2}/ /summary/1/document/en/ [L,R]
RewriteRule ^([a-z]{2})/ ../index.php?lang=$1&type=document

我想要实现的目标是:

如果没有指定语言,请重定向到英语:

示例:

website.com/summary/1/document --> website.com/summary/1/document/en/
website.com/summary/1/document/fr/ [no redirect]

当指定语言时,使用lang和type参数在内部重写到../index.php。

1 个答案:

答案 0 :(得分:1)

来自举报LApache Docs: flag_l

  

如果您在.htaccess文件或<Directory>部分中使用RewriteRule,那么了解规则的处理方式非常重要。这种简化形式是,一旦处理了规则,重写的请求就会被传回URL解析引擎,以便对其进行处理。可能的是,当处理重写的请求时,可能再次遇到.htaccess文件或部分,因此可以从开始再次运行规则集。最常见的情况是,如果其中一个规则导致重定向(内部或外部)导致请求进程重新开始,则会发生这种情况。


因为,在从第一个重写规则重定向后,重写的请求被传回URL解析引擎,

试试这个:

Options +FollowSymlinks
RewriteEngine on
RewriteBase /summary/1/document/

RewriteRule ![a-z]{2}/$ /summary/1/document/en/ [NC,L,R]
RewriteRule ^([a-z]{2})/$ ../index.php?lang=$1&type=document [L,QSA]