使用 Apache 主机主机的一点好处就是,可以使用中文作为 URL 网址。但是如果你的博客中都是非中文字符组成的前台网址,不想使用中文字符,那么就需要特殊设置了。
因为 Apache 执行 URL 会自动进行一次 urldecode 转换,变成了中文字符。因此正则匹配时使用 [\u4e00-\u9fa5]
或者 [^\x00-\xff]
均无效,还会出现 HTTP 500 错误。
不能以这种方式硬编码 unicode 码。
[\u4e00-\u9fa5]
在传递到 hs_compile() 时将被解释为 [\xe4\xb8\x80-\xe9\xbe\xa5]
,其中 \u4e00
被替换为 \xe4\xb8\x80
,\u9fa5
被替换为 \xe9\xbe\xa5
。此模式最终将在 Hyperscan 中简化为 [\x80-\e90]
。
因此,我们可以使用 [\xe4\xb8\x80-\xe9\xbe\xa5]
进行正则匹配。例如在 .htaccess 文件中这样设置:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} [\xe4\xb8\x80-\xe9\xbe\xa5] [NC] RewriteRule ^(.*)$ - [F,L] </IfModule>
这样就禁止了含有中文字符的 URL 地址。