双语站点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
相关产品推荐
相关产品推荐

