2012-09-14 55 views
0

如果我轉到domain.com,網站會重定向到預期的domain.com/en。但隨後在最後一條規則踢它扔在一個循環使我的URL看起來像這樣:.htaccess重定向循環問題

http://domain.com/en/?lang=en&request=&site=basecamp&lang=en&request=&site=basecamp&lang=en&request=&site=basecamp&lang=en&request=&site=basecamp 

.htaccess文件

Options +FollowSymlinks 
RewriteEngine on 

RewriteBase/

RewriteCond %{REQUEST_URI} !/(content|images|css|js|fonts|pdfs)/ 
RewriteRule /([^.]+\.(jpe?g|gif|bmp|png|css|js|eot|svg|ttf|ico|pdf))$ /$1 [NC,R,L] 

RewriteCond %{REQUEST_URI} !(content|images|css|js|fonts|pdfs)/.* 
RewriteRule !^[a-z]{2}/ /en/ [NC,L,R] 

RewriteCond %{REQUEST_URI} !/(init\.php|content|images|css|js|fonts|pdfs)/ 
RewriteRule ^([a-z]{2})/(.*)$ init.php?lang=$1&request=$2&site=basecamp[L,QSA] 

爲什麼htaccess文件重定向到/ GET_VARS而不是/init.php?GET_VARS?

如何避免此循環?

回答

1

嘗試通過刪除前導斜槓和尾部斜槓來更改上一個條件。您已將您的URI重寫爲:

/init.php 

但是,在您提供的條件下沒有後續斜線,因此規則會再次應用。它應該看起來像:

RewriteCond %{REQUEST_URI} !(init\.php|content|images|css|js|fonts|pdfs) 

不知道爲什麼你堅持在這裏你的病情的末端具有最後的斜線:

#     with this/here, it will never match init.php --------v 
RewriteCond %{REQUEST_URI} !/(init\.php|content|images|css|js|fonts|pdfs)/ 

但你可以通過只排除INIT解決它。 PHP直接:

RewriteCond %{REQUEST_URI} !init.php 

所以,只是這樣很明顯,最後一組的條件/規則將是這樣的:

RewriteCond %{REQUEST_URI} !init.php 
RewriteCond %{REQUEST_URI} !/(content|images|css|js|fonts|pdfs)/ 
RewriteRule ^([a-z]{2})/(.*)$ init.php?lang=$1&request=$2&site=basecamp [L,QSA] 

或者最壞的情況下,只需添加這在你的規則一開始:

RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule^- [L] 

,防止任何類型的重寫引擎的完全循環。

+0

不,那也行不通。 – HyderA

+0

感謝您的耐心至今Jon。所以這是更新後的規則:'RewriteCond%{REQUEST_URI}!/(init \ .php | content | images | css | js | fonts | pdfs)/ RewriteRule ^([az] {2})/ (。*)$ /init.php?lang=$1&request=$2&site=basecamp [L,QSA]' – HyderA

+0

@gAMBOOKa請參閱編輯 –