如何通过.htaccess检测URL中的特殊字符配置301重定向?
如何通过.htaccess检测URL中的特殊字符配置301重定向?
我来帮你解决这个问题!你遇到的核心问题是:Apache在处理包含非ASCII字符(比如你URL里的日文)的请求时,会自动把这些字符转换成URL编码形式(比如コ变成%E3%82%B3,お变成%E3%81%8A),而你直接在RewriteCond里写日文字符,自然匹配不到THE_REQUEST里的内容。
下面给你两种可行的解决方案,你可以根据需求选择:
方案一:精准匹配特定日文字符
如果你只想针对包含コ或お的URL做重定向,可以用URL编码后的字符串来写规则:
# 开启重引擎(如果没开启的话) RewriteEngine On # 匹配包含「コ」(编码后为%E3%82%B3)或「お」(编码后为%E3%81%8A)的请求 RewriteCond %{THE_REQUEST} ^[A-Z]+\s/[^?]*%E3%81%8A [NC,OR] RewriteCond %{THE_REQUEST} ^[A-Z]+\s/[^?]*%E3%82%B3 [NC] # 执行301永久重定向,保留原路径,NE参数避免重复编码字符 RewriteRule ^(.*)$ https://www.asterdmhealthcare.com/$1 [R=301,L,NE]
关键说明:
[NC]:忽略大小写(不过对日文编码来说影响不大,主要是保持规则兼容性)[OR]:表示两个条件满足任意一个即可触发重定向[NE]:全称No Escape,防止Apache把目标URL里的日文字符再次编码,保证重定向后的URL显示正常的日文[L]:表示这是最后一条规则,匹配后不再执行后续规则
方案二:匹配所有含非ASCII字符的URL
如果你的网站还有其他带非ASCII字符(比如更多日文、中文等)的URL需要重定向,用这个通用规则更高效:
RewriteEngine On # 匹配任何包含非ASCII字符的请求路径 RewriteCond %{REQUEST_URI} [^\x00-\x7F] # 执行301重定向,同样保留原路径并避免重复编码 RewriteRule ^(.*)$ https://www.asterdmhealthcare.com/$1 [R=301,L,NE]
关键说明:
[^\x00-\x7F]:正则表达式表示匹配任何不在ASCII码0-127范围内的字符,也就是所有非英文的特殊字符/语言字符,覆盖范围更广
测试与注意事项:
- 确保你的Apache服务器已经开启了
mod_rewrite模块,否则规则不会生效 - 测试时可以先把
R=301改成R=302(临时重定向),因为301会被浏览器缓存,测试过程中如果修改规则,可能需要清除浏览器缓存才能看到效果 - 可以用浏览器的「开发者工具-网络」面板查看重定向请求,确认状态码是301,目标URL正确
备注:内容来源于stack exchange,提问作者Khan Emir
相关产品推荐
相关产品推荐

