在rewriterule中使用unicode

我在RewriteRule使用了包含utf8字符的.htaccess文件中的以下语句。 .htaccess文件以utf8编码保存在记事本中。 网站的所有页面都保存在utf8中,所有的字符集都是utf8。

 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /new/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^هاستینگ/هاست-لینوکس-عادی/$ /linux-regular.php [L] </IfModule> 

但是,当我浏览到URL هاستینگ/هاست-لینوکس-عادی/只是我得到未find错误。

所有非ASCII字符都由客户端(浏览器)以%xxhex格式编码。

你可以find以下文章有帮助。

更具体地说:你的Apacheconfiguration文件将是纯ASCII文本,特殊字符将以%xxhex格式编码 – 甚至可以使用上面引用的w3schools页面上的一个简单工具来翻译它。

 RewriteBase /new/ : RewriteRule ^هاستینگ/هاست-لینوکس-عادی/$ /linux-regular.php [L] 

事实上,你已经为RewriteBase设置了一个特定的值,但是在RewriteRule replace中指定了一个根相对的URLpath引发了警报响铃。 RewriteBase指令只影响相对 (不是以斜线或scheme开始)pathreplace ,所以在这种情况下,它将被忽略 – 我肯定不是这个意图 – 否则就不需要设置它第一个地方。

通过删除RewriteRule replace的斜杠前缀,它将考虑到RewriteBase ,并将被重写为/new/linux-regular.php 。 例如:

 RewriteRule ^هاستینگ/هاست-لینوکس-عادی/$ linux-regular.php [L] 

这与你后来的评论是一致的:“…并从linux-regular.php开始删除/它工作。”

…特殊字符将以%xxhex格式编码

另外:虽然请求应该使用%编码(URL编码),但是RewriteRule 模式匹配的URLpath是由重写引擎进行%解码(URL解码)的。 因此,在RewriteRule 模式中使用实际的(UTF-8)字符在这里是正确的(与其他答案相反)。

如果您特别需要匹配%编码的URLpath,那么您将需要使用RewriteCond指令并检查THE_REQUEST服务器variables。