为什么会导致重定向循环?
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。
答案 0 :(得分:1)
来自举报L
:Apache 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]