编码问题(特殊字符):Apache mod_rewrite - > PHP GET - > XML文件名和标签

时间:2013-11-08 15:44:43

标签: apache mod-rewrite escaping special-characters

我正在尝试为mod_rewrite编写一个执行以下操作的规则: 网址:/xml/regularString已重定向至/xml/script.php?code=regularString

这适用于一个简单的规则,例如:

RewriteRule ^xml/([A-Za-z0-9-]+)/?$ xml/script.php?code=$1 [NC]

(旁注:为什么?很重要?我不希望有任何可选的重定向/匹配,但是如果我删除它就不起作用了)

无论如何......我主要需要以相同的方式重定向甚至非常罕见的特殊字符,但是如果我尝试扩展规则,它就不会匹配= 404,否则它会混淆它们以便PHP脚本因为类似的东西甚至无法访问(错误日志):

404等...... /xml/]*\xc2\xb0_\xc2\xb0*[

和规则

RewriteRule ^/xml/([A-Za-z0-9-*°><_]+/?$ ...等;有或没有逃避他们(通过)

(这应该是:URL /xml/>*°_°*<重定向到/xml/script.php?code= > *°_°*<(或其他一些编码,然后我可以在PHP中解码以获得相同的结果)

如何确保mod_rewrite始终找到php脚本并将代码重定向到它?我可以弄清楚如何在PHP中混淆它而不是那些RewriteRules,我担心。我尝试了[B][NE]这样的标志,在文档中,这些标志用于更改mod_rewrite的转义行为,但是它没有比上面的错误日志条目好404。 / p>

1 个答案:

答案 0 :(得分:0)

这适用于我在/.htaccess中的Debian / Apache2:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^xml/([^/]+)/?$ /xml/script.php?code=$1 [NC,R=301,L]

即使使用中文表意文字,也可以使用utf8编码的apache2服务器...

http://www.example.com/xml/急冻红辣椒 => /xml/script.php?code=急冻红辣椒

/xml/script.php必须存在,否则,无限循环是可预测的。