2011-05-31 109 views
3

我有一個網站,提供7種語言。語言重定向mod_rewrite

我想只能在用戶訪問主頁時才能根據瀏覽器語言重定向用戶。這是爲了增加可用性,當涉及到有機流量。我需要這個重定向,只適用於主頁,因爲網站也發送特定於每種語言的郵件程序,並且如果用戶被重定向,它們將不起作用。

此外,每種語言都是一個子域。即用於英語的www.site.com和用於德語的de.site.com。 郵件程序的URL看起來類似於:www.site.com/home/login?query=string

如果可能,我想用.htaccess文件來做到這一點。

任何人都可以提供見解?

謝謝。

回答

7

既然你只需要在您的主頁重定向一段時間,你可以這樣做(assumging www.xyz.com是您的主頁)

RewriteCond %{HTTP:HOST} www.xyz.com // user visiting default 
RewriteCond %{HTTP:Accept-Language} ^de [NC] // browser language German 
RewriteRule ^$ de.xyz.com [L,R=301] // R=302 if you need temporary redirect 

http://tech-blog.borychowski.com/index.php/2009/03/htaccess/redirect-according-to-browser-language-mod-rewrite-and-http_accept_language/

+0

我必須指定'HTTP:爲了防止相對重定向// de.xyz.com'(我不想),但否則,聽起來很好! – adampetrie 2011-06-01 13:13:29

1

這是一種改進方案Rizwan's answer,太多的編輯或評論(我試過)。

我假設你只想在用戶訪問默認域名的主頁(這裏是www.xyz.com,而不是de.xyz.com等)時重定向。這裏是你如何能做到這一點(以下these instructions):

RewriteCond %{HTTP:HOST} www.xyz.com   // Visit to default domain. 
RewriteCond %{HTTP:Accept-Language} ^de [NC] // Browser language German. 
RewriteRule ^$ http://de.xyz.com/  [L,R=301] 

RewriteCond %{HTTP:HOST} www.xyz.com 
RewriteCond %{HTTP:Accept-Language} ^it [NC] 
RewriteRule ^$ http://it.xyz.com/  [L,R=301] 

# etc. for your other 5 languages 

注&說明

  • R=301是永久重定向,這通常會被瀏覽器緩存。這會限制您稍後更改重定向目標的選項,因此您可以考慮使用非緩存R=302臨時重定向。
  • 通過查看Accept-Language:標頭中的第一個值來確定首選語言在大多數情況下都能正常工作,但不符合the standard。它誤解了理論上可能的值,如de;q=0.5, en;q=0.9。爲了完美地實現這一點,請參閱靈感herehere
  • RewriteRule,^$匹配空字符串,這意味着,「主頁」。這是因爲Apache將從與[source]中的.htaccess目錄對應的文件路徑中刪除目錄前綴。 (在虛擬主機方面,去除/不會發生和模式必須是^/$代替。)