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

如何为PHP多语言网站实现语言伪子目录格式的URL美化效果

实现方案

完全可以实现你需要的伪子目录格式语言URL,按以下两步操作即可:

1. 替换Apache重写规则

把你现有的.htaccess规则替换为以下内容:

Options +SymLinksIfOwnerMatch 
RewriteEngine on

# 修正URL中的双斜杠问题
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]

# 匹配语言前缀,将语言标识转为GET参数传递
RewriteRule ^(en|it)(/(.*))?$ $3?lang=$1 [L,QSA]

# 隐藏.php后缀的原有逻辑
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule (.*) $1.php [L]

规则说明:会自动将/en/blog这类地址转为blog?lang=en,再进一步映射到blog.php,其中QSA标记会保留URL中自带的其他查询参数,不会影响原有功能。

2. PHP逻辑适配

你现有的语言检测逻辑不需要修改,重写规则会自动把语言标识赋值到$_GET['lang'],和你原有逻辑完全兼容。
如果需要避免无语言前缀的URL被访问(利于SEO统一路径),可以在$_SESSION["lang"] = $current_lang;之后添加跳转逻辑:

$request_uri = trim($_SERVER['REQUEST_URI'], '/');
// 检测路径是否已经带有合法语言前缀
if (!preg_match('#^(en|it)(/|$)#', $request_uri)) {
    $target = "/$current_lang/" . ($request_uri ?: '');
    header("Location: $target", true, 301);
    exit;
}

注意事项

  • 后续站内生成所有链接的时候,统一加上对应的语言前缀即可
  • 如果需要兼容旧的?lang=格式的链接,可以额外添加301跳转规则,把旧路径统一跳转到新的伪子目录格式,避免重复收录问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:45:07