htaccess - 重定向循环
问题描述:
为什么会造成重定向循环?htaccess - 重定向循环
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内部。
答
从标志L
:Apache Docs: flag_l:
如果您在任一
.htaccess
文件或<Directory>
部分使用重写规则,它具有的规则是如何处理一些了解是很重要的。这种简化的形式是,一旦处理了规则,重写的请求就会交还给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]