0

我正在尝试为 mod_rewrite 编写执行以下操作的规则: URL:/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-*°><_]+/?$... ETC; 有或没有转义它们(通过)

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

如何确保 mod_rewrite 始终找到 php 脚本并将代码重定向到它?恐怕我可以弄清楚如何在 PHP 中将它弄乱,但在那些 RewriteRules 中却不行。我在文档中尝试了诸如[B]或之类的标志[NE],用于更改 mod_rewrite 的转义行为,但它并没有比前面提到的错误日志条目的 404 更好。

4

1 回答 1

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 必须存在,如果不存在,无限循环是可预测的。

于 2013-11-08T16:53:17.283 回答