2011-12-21 50 views
0

我有一個多語言站點,它使用cookie來存儲語言信息。我需要編寫一個.htaccess腳本根據cookie將語言添加到基於cookie的URI使用htaccess和基於URI設置cookie

a)檢查是否設置了語言cookie,以及URI是否包含該腳本。如果沒有,則將其添加到URI中。

現在我有這樣的:

RewriteCond %{HTTP_COOKIE} language=([a-z]{2}) [NC] 
RewriteCond %{REQUEST_URI} !^%1/(.*) [NC] 
RewriteRule ^(.*)$ /%1/%2 [L,NC,R=302] 

雖然這給了我正確的URI(「domain.com/en/」),它給了我一個錯誤說的頁面沒有正確重定向。

b)檢查URI中是否設置了語言參數,以及是否設置了適當的cookie。

到目前爲止的代碼因爲這是我有:

RewriteRule ^([a-z]{2})(.*)/$ - [co=language:$1:.domain.com:7200:/] 

但是你離開頁面後,這隻設置cookie。所以我將不得不在地址中添加'/ fr /',然後刷新兩次

我已經試過尋找谷歌和堆棧溢出,但我似乎無法得到這個工作!

回答

0

請求uri總是以/開頭。 此外,%1只適用於最後的RewriteCond,所以我覺得你的代碼應該是

RewriteCond %{HTTP_COOKIE} language=([a-z]{2}) [NC] 
RewriteCond %{REQUEST_URI} !^/(%1)/(.*) [NC] 
RewriteRule ^(.*)$ /%1/%2 [L,NC,R=302] 

該Cookie離開頁面後,被設置似乎有些奇怪。 cookie在響應中設置,所以它只會出現在下一個請求的請求頭中。不知道這是不是你的意思,但這是正常的行爲。嘗試在javascipt中檢查document.cookie

編輯:上述代碼不起作用。請參閱下面的我的更新版本。我在上面添加了你的cookie設置規則,並添加了L標誌,以便它下面的規則在匹配時不會被執行,從而防止重定向的無限循環,這就是firefox意思是「不正確重定向」的意思。

RewriteRule ^([a-z]{2})(/.*)?$ - [co=language:$1:.domain.com:7200:/] 

RewriteRule ^([a-z]{2})(/.*)?$ - [L] 

RewriteCond %{HTTP_COOKIE} language=([a-z]{2}) [NC] 
RewriteRule ^(.*)$ /%1/$1 [L,NC,R=302] 
+0

我是新來的.htaccess - 我不知道%1只適用於最後一個RewriteCond,謝謝!我嘗試了你的建議,但沒有奏效。它附加了語言,但Firefox說這個頁面沒有正確重定向。 – Martin 2011-12-21 18:21:06

+0

我嘗試了你的新建議,它仍然給我一個無限循環,並且uri變成http://domain.com/fr/fr/fr/fr/fr/fr/fr/fr/fr/fr/fr/ fr/fr/fr/fr/fr/fr/fr/fr/fr/ – Martin 2011-12-21 22:00:26

+0

如果我有Cookie,則重定向到domain.com/fr/404.shtml;如果我沒有cookie並轉到domain.com/fr/,那麼它只會在第二次查看該頁面時設置它。 – Martin 2011-12-22 15:27:30