2012-02-02 152 views
0

爲什麼會造成重定向循環?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內部。

回答

1

從標誌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]