簡體   English   中英

使用 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

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

這是對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM