使用基于浏览器语言的 htaccess 从和到子域重定向

Posted

技术标签:

【中文标题】使用基于浏览器语言的 htaccess 从和到子域重定向【英文标题】:redirect from and to subdomain with htaccess base on browser language 【发布时间】:2013-05-06 20:33:56 【问题描述】:

我需要根据用户的语言重定向主页中的用户。 我想我必须使用 RewriteCond %HTTP:Accept-Language 但我想不通。 我的最后一次尝试:

重写引擎开启 RewriteCond %HTTP:Accept-Language ^es [NC] RewriteRule .* http://mydomain.com [R,L] 重写引擎开启 RewriteCond %HTTP:Accept-Language ^en [NC] RewriteRule .* http://en.mydomain.com [R,L] 重写引擎开启 RewriteCond %HTTP:Accept-Language ^fr [NC] RewriteRule .* http://fr.mydomain.com [R,L]

但这会产生一个无限循环。

文件夹结构

htdocs/index.php ->mydomain.com htdocs/en/index.php ->en.mydomain.com htdocs/fr/index.php -> fr.mydomain.com

【问题讨论】:

【参考方案1】:

您需要确保 HOST 尚未指向正确的位置:

RewriteEngine on
RewriteCond %HTTP_HOST !^mydomain.com$ [NC]
RewriteCond %HTTP:Accept-Language ^es [NC]
RewriteRule .* http://mydomain.com [R,L]

RewriteCond %HTTP_HOST !^en.mydomain.com$ [NC]
RewriteCond %HTTP:Accept-Language ^en [NC]
RewriteRule .* http://en.mydomain.com [R,L]

RewriteCond %HTTP_HOST !^fr.mydomain.com$ [NC]
RewriteCond %HTTP:Accept-Language ^fr [NC]
RewriteRule .* http://fr.mydomain.com [R,L]

【讨论】:

es 语言一切正常,但英语语言循环... 规则看起来是一致的,所以它们应该都是一样的。尝试清除浏览器缓存/历史记录,或尝试使用其他浏览器进行测试。当我使用 Chrome 时,我注意到它会缓存原始尝试,而不是使用新的重定向规则。

以上是关于使用基于浏览器语言的 htaccess 从和到子域重定向的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 重写语言子域

.htaccess 将子域重写到目录并将子域保留在 url

使用 If 语句清除单元格

对使用 .htaccess 输入的任何 URI 强制使用 SSL 和 www 子域?

基于用户的子域[重复]

在 AWS lightail LAMP 中向 htaccess 文件添加子域