![](/img/trans.png)
[英]How to redirect based on Accept-Language with Apache / mod_rewrite
[英]Language Redirect with mod_rewrite
我有一個提供 7 種語言的網站。
我希望僅在用戶訪問主頁時才能根據瀏覽器語言重定向用戶。 這是為了在自然流量方面增加可用性。 我需要此重定向僅適用於主頁,因為該站點還發送特定於每種語言的郵件,如果用戶被重定向,它們將不起作用。
每種語言也是一個子域。 即 www.site.com 用於英語和 de.site.com 用於德語。 郵件 URL 看起來類似於:www.site.com/home/login?query=string
如果可能的話,我想用 .htaccess 文件來做到這一點。
任何人都可以提供見解嗎?
謝謝。
由於您只想在主頁上重定向,因此可以這樣做(假設 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
這是對Rizwan 答案的詳細說明,對於編輯或評論來說太多了(我試過了)。
我假設您只想在用戶訪問默認域的主頁時進行重定向(此處為www.xyz.com
,而不是de.xyz.com
等)。 以下是您的操作方法(按照這些說明):
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:
header 在大多數情況下都可以使用,但不符合標准。 它誤解了理論上可能的值,例如de;q=0.5, en;q=0.9
。 要完全正確,請在此處和此處查看靈感。RewriteRule
中, ^$
匹配空字符串,即“主頁”。 這是因為 Apache 將從文件路徑中刪除與您的 .htaccess 在 [ source ] 中找到的目錄相對應的目錄前綴。 (在 VirtualHost 上下文中,刪除/
不會發生,模式必須改為^/$
。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.