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

.htaccess多语言站点RewriteRule重写规则冲突配置问题求解

问题根源
  • 规则优先级错误:原配置把单语言内容页重写规则放在多语言规则前面,会优先截取路径片段,比如/en/会被第一条规则匹配成id=en,/en/profile.php会被先匹配到文件名片段触发错误重写
  • 规则逻辑错误:原多语言规则直接把语言段后面的路径拼接到根路径,没有区分真实实体文件和需要转发到page.php的内容页,且首个查询参数错误使用&拼接,未使用查询参数起始符?,会导致参数无法被程序识别
  • 场景覆盖缺失:没有单独处理带语言前缀的根路径(如/en/)场景,「非真实目录/文件才重写」的判断仅作用在第一条规则上,真实存在的PHP文件会被误拦截
正确.htaccess配置
RewriteEngine On

ErrorDocument 404 /error

# 处理带语言前缀的首页路径 如 /en/
RewriteRule ^(en|es|ar|fr|de|ru|pt-br)/?$ /?lang=$1 [L]

# 处理带语言前缀的实体PHP文件 如 /en/profile.php
RewriteRule ^(en|es|ar|fr|de|ru|pt-br)/([^/]+\.php)$ /$2?lang=$1 [L]

# 处理带语言前缀的内容页 如 /en/about
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(en|es|ar|fr|de|ru|pt-br)/(.+?)/?$ /page.php?id=$2&lang=$1 [L]

# 处理默认语言(无语言前缀)的内容页 如 /about
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)$ /page.php?id=$1 [L]
匹配效果校验
  • 访问website.com/:不触发任何重写,直接访问站点首页
  • 访问website.com/en/:匹配首页语言规则,重写到/?lang=en
  • 访问website.com/en/profile.php:匹配实体文件语言规则,重写到/profile.php?lang=en,不会被误判为内容页
  • 访问website.com/about:匹配默认语言内容页规则,重写到/page.php?id=about
  • 访问website.com/en/about:匹配多语言内容页规则,重写到/page.php?id=about&lang=en

注:原需求示例中website.com/en/about的目标路径漏写了lang参数值,上述配置会自动传入对应语言标识,可直接被后端程序读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:18:23