我有一个以7种语言提供的网站。
我希望只有在用户访问主页时才能基于浏览器语言重定向用户。这是为了增加有机交通的可用性。我需要将此重定向仅应用于主页,因为该网站还会发送特定于每种语言的邮件程序,如果用户被重定向,它们将无法正常工作。
此外,每种语言都是子域。即www.site.com for English和de.site.com for German。 邮件程序URL类似于:www.site.com/home/login?query=string
如果可能,我想用.htaccess文件执行此操作。
有人能提供见解吗?
感谢。
答案 0 :(得分:7)
由于您只想在主页上重定向,您可以这样做(假设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
答案 1 :(得分: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
Notes&说明强>:
R=301
是永久重定向,通常由浏览器缓存。这限制了您稍后更改重定向目标的选项,因此您可以考虑使用非缓存的R=302
临时重定向。Accept-Language:
标头中的第一个值来确定首选语言在大多数情况下都有效,但不符合the standard。它误解了理论上可能的值,如de;q=0.5, en;q=0.9
。要完美地理解这一点,请参阅灵感here和here。RewriteRule
中,^$
匹配空字符串,即“主页”。那是因为Apache将从与[source]中的.htaccess目录对应的文件路径中删除目录前缀。 (在VirtualHost上下文中,删除/
不会发生,而且模式必须是^/$
。)