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内部。

从标志LApache 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]