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

双语站点SEO友好美观URL配置咨询(基于.htaccess)

适配现有架构的SEO友好双语URL优化方案

需求背景

现有基于Session切换实现的双语站点,希望将URL优化为site.com/en/services这类SEO友好的格式,在页面名称前仅显示da或en语言标识。当前站点无子目录、未使用路由,仅依赖.htaccess配置,需提供适配现有架构的改造方案。


1. 修改.htaccess配置

替换原有.htaccess内容,添加语言前缀的URL重写规则,同时保留原有隐藏.php后缀的逻辑:

# Page not found / 404 set-up
ErrorDocument 404 /404.php

RewriteEngine on

# 规则1:匹配带语言前缀的URL,转发到对应PHP文件并传递lang参数
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(en|da)/(.*)$ $2.php?lang=$1 [QSA,L]

# 规则2:根目录访问自动重定向到默认语言(这里设为en)
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^$ /en/ [R=301,L]

# 规则3:隐藏.php文件后缀(原有逻辑保留)
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]

DirectoryIndex /index.php

说明:规则1会将/en/services解析为services.php?lang=en,规则2确保根目录访问强制带语言前缀,避免URL不一致。


2. 更新PHP语言切换逻辑

修改原有语言处理脚本,优先从URL参数获取语言,同步Session并处理无语言前缀的URL重定向:

<?php
session_start();

$supportedLanguages = ['en', 'da'];
$defaultLang = 'en';

// 优先从URL参数获取语言,同步到Session
if (isset($_GET['lang']) && in_array($_GET['lang'], $supportedLanguages)) {
    $_SESSION['lang'] = $_GET['lang'];
} 
// Session无语言时设为默认
elseif (!isset($_SESSION['lang'])) {
    $_SESSION['lang'] = $defaultLang;
}

$currentLang = $_SESSION['lang'];

// 检查当前URL是否带正确语言前缀,无则301重定向
$requestUri = $_SERVER['REQUEST_URI'];
if (!preg_match("/^\/($currentLang)\//", $requestUri) && $requestUri !== "/") {
    $newUri = "/$currentLang" . $requestUri;
    header("Location: $newUri", true, 301);
    exit;
}

// 加载对应语言文件
$languageFile = "languages/" . $currentLang . ".php";
if (file_exists($languageFile)) {
    require_once $languageFile;
} else {
    die("Language file not found.");
}
?>

说明:新增URL前缀检查逻辑,确保所有访问都带语言标识,同时保留Session记录用户偏好的功能。


3. 更新HTML语言切换链接

修改切换按钮的生成逻辑,生成带语言前缀的URL,替代原有的?lang参数形式:

<li role="menuitem">
    <?php
    // 移除当前URL中的语言前缀,拼接目标语言前缀
    $currentUri = str_replace("/" . $_SESSION['lang'], "", $_SERVER['REQUEST_URI']);
    if($_SESSION['lang'] == "da"){ 
        echo '<a class="language-switch" href="/en' . $currentUri . '">EN</a>';
    } else { 
        echo '<a class="language-switch" href="/da' . $currentUri . '">DA</a>';
    }
    ?>
</li>

说明:切换语言后会跳转到当前页面的对应语言版本,URL格式保持统一。


验证要点

  • 访问site.com/services会自动重定向到site.com/en/services
  • 点击语言切换按钮可在/en/xxx和/da/xxx之间切换,且保持当前页面
  • 所有URL均无.php后缀,符合SEO友好要求
  • Session仍会记录用户的语言偏好,下次访问自动加载对应语言版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:26:07