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

求助:使用.htaccess将指定语言路径重定向至新路径

解决语言路径重定向的循环问题

这是重定向配置里很常见的坑!你遇到的循环问题,根源在于原规则没排除目标路径——当请求被重定向到/en/xxx后,这个新请求的URI不在你的排除列表里,会再次触发规则,导致无限循环。

问题拆解

你的需求是:

  • 将/da开头的路径完整重定向到/dk(保留子结构,比如/da/about→/dk/about)
  • 将/fi开头的路径完整重定向到/en
  • 其他未指定的路径统一导向/en

原规则只排除了/fi和/da,但没排除最终的目标路径/en和/dk,这就导致了循环。

正确的配置方案

调整规则顺序,先处理特定语言的跳转,再处理全局默认跳转,同时排除所有目标路径避免循环:

# 1. 优先处理/da → /dk的重定向,保留原路径子结构
RewriteCond %{REQUEST_URI} ^/da(/|$) [NC]
RewriteRule ^da/(.*)$ /dk/$1 [R=301,L,QSA]

# 2. 处理/fi → /en的重定向,保留原路径子结构
RewriteCond %{REQUEST_URI} ^/fi(/|$) [NC]
RewriteRule ^fi/(.*)$ /en/$1 [R=301,L,QSA]

# 3. 最后处理其他非指定语言的请求,统一导向/en
# 这里排除了/en和/dk,避免循环
RewriteCond %{REQUEST_URI} !^/(en|dk)(/|$) [NC]
RewriteRule ^(.*)$ /en/$1 [R=301,L,QSA]

关键细节说明

  • 规则顺序很重要:特定语言的跳转必须放在全局规则前面,确保这些请求不会进入后续的默认重定向逻辑。
  • 排除目标路径:全局规则的RewriteCond排除了/en和/dk,这样当请求已经处于这些路径时,不会再次触发重定向,彻底解决循环问题。
  • 保留子结构:RewriteRule里的^(.*)$和/$1会完整保留原路径的子部分,保证跳转后路径结构一致。

测试小技巧

测试阶段可以把R=301改成R=302(临时重定向),避免浏览器缓存错误的重定向规则,确认所有跳转逻辑正常后,再改回R=301永久重定向。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:03:41