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

如何实现大写西里尔字母URL转小写的301重定向以解决404错误?

解决LiteSpeed服务器西里尔大写URL转小写301重定向问题

方法1:用Unicode属性修正匹配规则

原规则的字符匹配可能没覆盖全大写西里尔字母,或者LiteSpeed对REQUEST_URI的编码处理导致匹配失效。试试用Unicode大写字母属性匹配(多数新版LiteSpeed默认支持):

RewriteEngine On
# 匹配包含任意大写字母(含拉丁、西里尔)的请求路径
RewriteCond %{REQUEST_URI} \p{Lu}
RewriteRule ^(.*)$ /${tolower:$1} [R=301,L,NE]

加上NE标志是为了防止重定向时西里尔字母被转义,保证URL正确显示。

方法2:明确列出大写西里尔字母范围

如果Unicode属性匹配不生效,直接把所有大写西里尔字母(包括Ё这类扩展字符)列出来匹配:

RewriteEngine On
# 匹配大写拉丁或西里尔字母
RewriteCond %{REQUEST_URI} [A-ZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ]
RewriteRule ^(.*)$ /${tolower:$1} [R=301,L,NE]

注意把.htaccess文件保存为无BOM的UTF-8编码,不然字符匹配会乱码。

方法3:PHP脚本兜底处理

要是Rewrite规则始终不管用,用PHP脚本实现逻辑更稳妥:

  1. 在网站根目录创建redirect-lowercase.php,代码如下:
<?php
$requestUri = $_SERVER['REQUEST_URI'];
// 检查是否存在大写西里尔或拉丁字母
if (preg_match('/[A-ZА-ЯЁ]/u', $requestUri)) {
    $lowercaseUri = mb_strtolower($requestUri, 'UTF-8');
    header("Location: https://{$_SERVER['HTTP_HOST']}{$lowercaseUri}", true, 301);
    exit;
}
// 没有大写字符就继续处理原请求
include $_SERVER['SCRIPT_NAME'];
?>
  1. 在.htaccess里添加规则,把符合条件的请求转去脚本:
RewriteEngine On
RewriteCond %{REQUEST_URI} [A-ZА-ЯЁ]
RewriteRule ^(.*)$ /redirect-lowercase.php [L]

必做检查项

  • 确认LiteSpeed虚拟主机配置里开了AllowOverride All,不然.htaccess规则不会生效。
  • 测试前清除浏览器缓存,旧的301缓存会干扰结果。
  • 确保重定向规则放在.htaccess的最前面,别被其他规则(比如404处理)覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:10:55