【问题标题】:.HTACCESS Unicode Recignisition/Encoding.HTACCESS Unicode 识别/编码
【发布时间】:2017-11-13 11:16:07
【问题描述】:

我的 .htaccess 中的 URL 速记存在问题。

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

# URL ShortCut Maker.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} .(.+)$
RewriteRule ^(.) ?open=encyclopedia&letter=$1&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

编辑:有问题/问题的非英文字母。

有什么解决办法吗?

【问题讨论】:

  • example.com/Šanti 的预期重写是什么?
  • 你为什么不直接使用 %1 并使用 mb_substr 提取第一个字母?
  • 我添加了更多关于我的问题的说明... ...我不知道如何解释。 @anubhava:example.com/Šanti 应该重定向到并打开 ?open=encyclopedia&letter=Š&term=Šanti。这适用于所有其他 ĐČĆŽ字母。它是双重编码和缩短的。 @Peter:你什么意思?

标签: php .htaccess url unicode shorthand


【解决方案1】:

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

RewriteEngine On

RewriteBase /

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

# executes when there is exactly 1 space in URI
RewriteRule "^(\S*)\s(\S*)$" $1+$2 [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=$1&term=$0 [B,L,QSA]

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

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

【讨论】:

  • 那么案例 1 即example.com/Šazdini 是正确的吧?
  • 好的,现在试试我更新的规则。确保这些规则位于您的 .htaccess 顶部
  • 抱歉,我现在什么都听不懂。请您编辑问题并澄清这些情况。
猜你喜欢
  • 2019-10-05
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多