2011-11-27 169 views
0

我試圖重定向所有用戶,但瑞典語的用戶到我網站的英文頁面,但由於默認瑞典語瀏覽器同時安裝了英語和瑞典語,所有用戶都重定向到英文頁面。雙語言瀏覽器重定向

Swedish : xyz.com 
English : xyz.com/?lang=en 

得到了一些幫助,這代碼和它的作品,但不與enlish瑞典瀏覽器安裝

RewriteEngine on 
RewriteCond %{QUERY_STRING} !(&|^)lang= 
RewriteCond %{HTTP:Accept-Language} (aa|ab|af|am|ar|as|ay|az|ba|be|bg|bh|bi|bn|bo|br|ca|co|cs|cy|da|de|dz|el|en|eo|es|et|eu|fa|fi|fj|fo| fr|fy|ga|gd|gl|gn|gu|ha|hi|hr|hu|hy|ia|ie|ik|in|is|it|iw|ja|ji|jw|ka|kk|kl|km|kn|ko|ks|ku|ky|la|ln|l o|lt|lv|mg|mi|mk|ml|mn|mo|mr|ms|mt|my|na|ne|nl|no|oc|om|or|pa|pl|ps|pt|qu|rm|rn|ro|ru|rw|sa|sd|sg|sh |si|sk|sl|sm|sn|so|sq|sr|ss|st|su|sw|ta|te|tg|th|ti|tk|tl|tn|to|tr|ts|tt|tw|uk|ur|uz|vi|vo|wo|xh|yo| zh|zu) [NC] 
RewriteRule ^(.*)$ http://www.xyz.com/$1?lang=%1 [L] 

我怎樣才能做到這一點所以每一個瀏覽器重定向到xyz.com/?lang=en,但與瑞典的異常會留在xyz.com

+1

像我在你的[其他問題](http://stackoverflow.com/questions/8130103/htaccess-language-redirect-310-error)中說過,如果你打算做一些複雜的事情,.htaccess是將不足。 –

+0

喬恩,謝謝你在previouse post的幫助,由於我缺乏技能,我無法理解爲什麼oits複雜的htaccess。不應該成爲一個SV語言例外的常規重定向程序? – user1046583

+0

從我最後一個問題的評論中,在.htaccess中沒有條件邏輯。例如,在.htaccess中沒有「if/then/else」。你所要求的是解析** Accept-Language **標題,並根據實際的服務語言做出明智的決定。你**不能**使用mod_rewrite來做到這一點。 –

回答

-1

也許你應該嘗試添加一個檢查語言是否不包含瑞典語的規則......我希望我可以假設瑞典語瀏覽器有類似「瑞典語和英語」的東西?

另一種選擇是檢查瑞典語,並使用[L]選項「重寫」到相同的語句,然後在該語句之後追加lang變量。

RewriteEngine on 
RewriteCond %{QUERY_STRING} !(&|^)lang= 
RewriteCond %{HTTP:Accept-Language} (se) [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L] 
RewriteRule ^(.*)$ http://www.example.com/$1?lang=%1 [L] 
+0

好主意,但'接受語言'將永遠不會只包含'se'。 (請參閱我的答案爲什麼) –

+0

對不起,coundn't得到它的工作...我得到310(網:: ERR_TOO_MANY_REDIRECTS) – user1046583

+0

一直在試圖修改代碼,以使其工作,但我似乎無法擺脫的重定向循環。我可以將默認頁面設置爲/?lang = en,並且僅將sv重定向到xyz.com? – user1046583

1

accept-language string是一個複雜的野獸 - 它可以包含多個值:

se, en-gb;q=0.8, en;q=0.7 

他們每個人也可以在幾種不同的方式寫:

se, se-SE, se-FI, se-EE // Swedish in .... Sweden, Finland, Estonia 

雖然理論上你的需求肯定可以反映在正則表達式中,像這樣的東西通常最好用你使用的任何服務器端語言完成ng - 它必然會有現成的庫來正確解析accept-language,甚至可能會將其縮減爲2個字母的語言字符串,然後才能進行重定向。

+0

我的兩個美分:雖然複雜的Accept-Language處理確實是在.htaccess之外最好完成的,但OP的請求非常簡單,我認爲沒有理由不在.htaccess中進行。 .htaccess可以很好地模仿if-then-else(OP的順序已經完成了這種可能的方式之一),並且它可以非常容易地匹配子串(不僅僅是整個字符串)。在我看來,所有的OP需求都是這樣的:RewriteCond%{QUERY_STRING} \ blang = en [OR] - RewriteCond%{HTTP:Accept-Language}!\ bse \ b - RewriteRule ...英文版 –