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

Apache .htaccess匹配韩文GET查询的Rewrite规则执行失败求助

问题

我尝试在.htaccess中编写Rewrite规则,将包含韩文字符的搜索请求重定向至404页面,使用的规则如下:

RewriteEngine On
RewriteCond %{QUERY_STRING} [\x{ac00}-\x{d7a3}]
RewriteRule ^(.*)$ /404.html [R=404,L]

测试时提示正则表达式执行失败,但在PHP中使用带/u修饰符的相同正则却能正常工作:

if (preg_match('/[\x{ac00}-\x{d7a3}]/u', $string)) {
    echo "URL contains korean charachters";
}

请问该如何解决?


解决方案

核心原因

PHP的preg_match通过/u修饰符开启了UTF-8模式,支持\x{xxxx}格式的Unicode转义;但Apache的mod_rewrite默认正则引擎不支持这种Unicode转义语法,也未默认启用UTF-8模式,直接使用会导致正则解析失败。

方法1:兼容所有Apache版本(匹配UTF-8字节范围)

韩文Hangul Syllables(U+AC00至U+D7A3)的UTF-8编码是3字节序列,我们可以直接匹配这些字节组合来定位韩文字符:

RewriteEngine On
# 匹配韩文音节的UTF-8字节范围
RewriteCond %{QUERY_STRING} ^.*(?:\xEA[\xB0-\xBF][\x80-\xBF]|\xEB[\x80-\xBF][\x80-\xBF]|\xEC[\x80-\xBF][\x80-\xBF]|\xED[\x80-\x9D][\x80-\xBF]|\xED\x9E[\x80-\xA3]).*$ [NC]
# 直接返回404,无需重写路径
RewriteRule ^ - [R=404,L]

方法2:仅适用于Apache 2.4+(启用PCRE UTF-8模式)

Apache 2.4及以上版本的mod_rewrite支持PCRE的UTF-8模式,只需在正则开头添加(*UTF8)修饰符,即可识别Unicode转义语法:

RewriteEngine On
# 添加(*UTF8)启用UTF-8模式,支持Unicode转义
RewriteCond %{QUERY_STRING} (*UTF8)[\x{ac00}-\x{d7a3}]
RewriteRule ^ - [R=404,L]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:05:24