.HTACCESS Unicode Recignisition/Encoding

.HTACCESS Unicode Recignisition/Encoding

我的 .htaccess 中的 URL 速记有问题。

也就是说,这个(现在是旧的)代码一切正常...

# URL ShortCut Maker.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} .(.+)$
RewriteRule ^(.) ?open=encyclopedia&letter=&term=%1 [B,L,NC]

它将 URL 正确显示为 example.com/Modesty(它显示的页面就好像 URL 应该是 /?open=encyclopedia&letter=m&term=modesty),但是当我输入时出现问题: example.com/Šanti,或
example.com/Đin,或
example.com/Žal
example.com/Čakra,或
example.com/Ćof...
...如果我输入这些 URL 中的任何一个 - 它显示的页面就像我输入的一样:
?open=encyclopedia 而不是
?open=encyclopedia&letter=Š&term=Šanti

编辑:question/problem中的非英语字母。

有什么解决办法吗?

您可以使用以下规则更改现有规则:

RewriteEngine On

RewriteBase /

# executes repeatedly as long as there are more than 1 spaces in URI
RewriteRule "^(\S*)\s+(\S* .*)$" + [N,NE]

# executes when there is exactly 1 space in URI
RewriteRule "^(\S*)\s(\S*)$" + [L,R=302,NE]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteRule ^([A-Z](?:[^\x00-\x7F]+|[A-Z])?).*$ ?open=encyclopedia&letter=&term=[=10=] [B,L,QSA]

RewriteRule ^([^\x00-\x7F]+).*$ ?open=encyclopedia&letter=&term=[=10=] [B,L,QSA]

否定字符 class [^\x00-\x7F] 匹配 ASCII 范围外的任何字符。