Apache根据浏览器语言重定向至对应语言域名方案咨询
根据浏览器语言重定向到对应域名的解决方案
这里有几个实用的方案,你可以根据自己的部署环境来选:
方案1:前端JavaScript实现(适合静态站点/无服务器配置权限)
如果没法改服务器配置,这个方案最容易上手,直接在maindomain.com/path的页面里加一段代码就行:
// 尽量放在<head>标签里靠前位置,确保页面加载前就执行重定向 document.addEventListener('DOMContentLoaded', function() { // 获取浏览器的首选语言(兼容不同浏览器写法) const userLanguage = navigator.language || navigator.userLanguage; // 默认重定向到英文域名 let targetDomain = 'english.com'; // 判断是否是法语(包含fr-FR、fr-CA等所有法语变体) if (userLanguage.startsWith('fr')) { targetDomain = 'french.com'; } // 保留当前页面的路径和查询参数,拼接完整重定向URL const redirectUrl = `https://${targetDomain}${window.location.pathname}${window.location.search}`; // 执行重定向 window.location.href = redirectUrl; });
注意:这个方案依赖JavaScript,如果用户浏览器禁用了JS,重定向就会失效。如果需要兼容这类场景,优先选服务器端方案。
方案2:Nginx服务器端配置(适合Nginx托管的站点)
服务器端重定向兼容性更好,完全不依赖前端。修改Nginx的站点配置文件:
server { listen 80; server_name maindomain.com; location / { # 匹配Accept-Language头以fr开头的请求(不区分大小写) if ($http_accept_language ~* ^fr) { return 302 https://french.com$request_uri; } # 默认重定向到英文域名,$request_uri会保留完整路径和参数 return 302 https://english.com$request_uri; } }
修改完后记得重启Nginx生效。如果是永久重定向(比如SEO需求),可以把302改成301。
方案3:Apache服务器端配置(适合Apache托管的站点)
需要先确保Apache启用了mod_rewrite模块,然后在站点根目录的.htaccess文件里添加规则:
RewriteEngine On # 匹配Accept-Language头以fr开头的请求,[NC]表示不区分大小写 RewriteCond %{HTTP:Accept-Language} ^fr [NC] RewriteRule ^(.*)$ https://french.com/$1 [R=302,L] # 默认重定向到英文域名,[L]表示匹配到这条后停止后续规则处理 RewriteRule ^(.*)$ https://english.com/$1 [R=302,L]
同样,永久重定向可以把302换成301。
内容的提问来源于stack exchange,提问作者Christian Meichtry
相关产品推荐
相关产品推荐

