我正在尝试为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>
答案 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必须存在,否则,无限循环是可预测的。