You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将语言子文件夹全部重定向至对应语言主文件夹?

解决Apache语言子文件夹重定向循环问题

这个问题我之前帮朋友处理过,核心就是你之前的规则不小心把目标路径/es/本身也纳入了匹配范围,导致服务器反复重定向同一个地址,形成死循环。下面给你两种可靠的解决方案,选一种适合你配置场景的就行:

方案一:使用RedirectMatch

直接用RedirectMatch的话,把匹配规则里的(.*)换成(.+)——前者会匹配空字符串(也就是/es/本身),后者要求至少有一个字符,这样就只会命中/es/下的子文件夹路径:

RedirectMatch 301 ^/es/(.+)$ /es/

比如访问http://example.com/es/folder1/或者http://example.com/es/folder1/folder2/,都会被永久重定向到http://example.com/es/,而/es/本身不会触发重定向,完美避开循环。

方案二:使用RewriteRule(更灵活)

如果你用的是Apache的mod_rewrite模块,这个写法更可控,记得先开启RewriteEngine:

RewriteEngine On
# 匹配/es/后至少有一个字符的路径,重定向到/es/,L标志表示处理完这条规则就停止
RewriteRule ^es/(.+)$ /es/ [R=301,L]

这里的L(Last)标志很重要,它会告诉Apache处理完这条规则就不再往下执行,避免其他规则干扰;R=301是永久重定向,如果你还在测试阶段,可以先改成R=302(临时重定向),因为301会被浏览器缓存,测试期间改规则可能需要清缓存才能看到效果。

额外提醒

  • 如果是在虚拟主机配置文件里写规则,需要加上完整域名的话,直接把目标路径改成http://www.example.com/es/就行,比如:
    RewriteRule ^es/(.+)$ http://www.example.com/es/ [R=301,L]
    
  • 测试前最好先清空浏览器缓存,或者用隐私模式访问,避免旧的重定向缓存影响结果。

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

火山引擎 最新活动