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

WordPress多语言站点切换默认语言后无重定向链的批量URL重定向

解决WordPress多语言网站重定向链问题

你的规则出现重定向链的核心原因是:当/en/xxx重定向到/xxx后,/xxx又会被第二条规则匹配(既不属于/en/也不属于/it/),进而被重定向到/it/xxx,形成/en/xxx → /xxx → /it/xxx的链式跳转,同时首页的判断逻辑也未明确区分。

以下是修正后的.htaccess规则,可完美满足需求且避免循环:

RewriteEngine On

# 1. 处理 /en/* 重定向到 /*(默认英文)
# 单独处理/en首页重定向到根域名首页
RewriteRule ^en$ / [R=301,L]
# 处理/en/xxx格式的路径重定向到/xxx
RewriteRule ^en/(.*)$ /$1 [R=301,L]

# 2. 处理 site.com/*(首页除外)重定向到 /it/*
# 排除根首页,避免默认英文首页被跳转
RewriteCond %{REQUEST_URI} !^/$
# 排除WordPress核心目录/文件,不影响后台和静态资源访问
RewriteCond %{REQUEST_URI} !^/wp-admin/
RewriteCond %{REQUEST_URI} !^/wp-content/
RewriteCond %{REQUEST_URI} !^/wp-includes/
# 排除已存在的文件和目录,防止静态资源被错误跳转
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 排除已经是/it/开头的路径,避免循环
RewriteCond %{REQUEST_URI} !^/it/
RewriteRule ^(.*)$ /it/$1 [R=301,L]

# 保留WordPress默认路由规则(必须放在所有重定向规则之后)
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

关键细节说明:

  • 优先级顺序:先处理/en/的重定向,确保这类请求直接跳转到根路径,不会被后续规则干扰。
  • 首页排除:通过RewriteCond %{REQUEST_URI} !^/$明确保留根域名首页为英文默认页,不触发跳转。
  • 资源保护:排除WordPress核心目录和已存在的文件/目录,避免后台、主题文件、图片等静态资源被错误重定向。
  • 循环规避:添加RewriteCond %{REQUEST_URI} !^/it/,防止/it/开头的路径被重复跳转。

测试建议:

  1. 先使用R=302临时重定向测试,确认所有跳转逻辑正常后,再改为R=301永久重定向(避免错误跳转影响SEO)。
  2. 清除浏览器缓存后测试核心场景:
    • site.com/en/about → 跳转至site.com/about
    • site.com/about → 跳转至site.com/it/about
    • site.com/ → 保持为英文首页,无跳转
    • site.com/it/about → 保持原路径,无跳转
    • site.com/wp-admin → 正常访问后台,无跳转

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:52:45