You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改.htaccess语言跳转规则以保留用户手动选择的语言偏好?

解决思路

你需要先在用户手动切换语言时,给用户浏览器种下存储首选语言的Cookie,再调整.htaccess规则,优先读取Cookie值判断跳转目标,没有Cookie时再 fallback 到浏览器Accept-Language判断即可解决该问题。

步骤1:新增语言偏好Cookie存储逻辑

在你的index.php处理语言切换的代码部分,添加Cookie设置逻辑,示例代码:

// 当用户触发语言切换操作时执行
$expire = time() + 86400 * 30; // 有效期30天,可自行调整
setcookie('preferred_lang', $_GET['lang'], $expire, '/', '.website.com'); // 域名替换为你自己的站点域名,前缀加.保证所有子站可读取该Cookie
步骤2:修改.htaccess规则

调整后的完整规则如下:

# 优先按用户手动选择的语言Cookie跳转
RewriteCond %{HTTP_COOKIE} preferred_lang=nl [NC]
RewriteRule ^$ https://nl.website.com/ [L,R=302]

RewriteCond %{HTTP_COOKIE} preferred_lang=tr [NC]
RewriteRule ^$ https://tr.website.com/ [L,R=302]

RewriteCond %{HTTP_COOKIE} preferred_lang=en [NC]
RewriteRule ^$ https://www.website.com/ [L,R=302]

# 没有Cookie时按浏览器默认语言跳转
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^$ https://www.website.com/ [L,R=302]

RewriteCond %{HTTP:Accept-Language} ^nl [NC]
RewriteRule ^$ https://nl.website.com/ [L,R=302]

RewriteCond %{HTTP:Accept-Language} ^tr [NC]
RewriteRule ^$ https://tr.website.com/ [L,R=302]

# 原路径映射规则保持不变
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(en|nl|tr)/?$ index.php?lang=$1 [QSA,NC,L]

注意:调试阶段先用302临时重定向,确认规则完全生效后再改成301永久重定向,避免浏览器缓存旧规则导致调试异常。

注意事项
  • 测试前务必清空浏览器缓存,或使用无痕模式测试,避免之前的301重定向缓存干扰结果
  • Cookie的作用域要设置正确,确保主站和所有语言子站都能读取到同一个preferred_langCookie
  • 如果用户清空浏览器Cookie,会自动回退到按浏览器默认语言跳转的逻辑,符合常规产品交互逻辑

内容的提问来源于stack exchange,提问作者CWRI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:15:05