阿帕奇:NE标志(无转义)在重写中不起作用mod_rewrite规则



我有一个这样的网址:

http://www.sample.com/do/example/v1/abcd

我想将其重定向到:

http://sub.sample.com/some/test/do/example/v1/abcd

所以我创建了一个.htaccess文件并使用RewriteRule来执行此操作:

RewriteCond %{HTTP_HOST} ^(www.)?sample.com$
RewriteCond %{REQUEST_URI} ^/do/(.*)$
RewriteRule ^(.*) http://sub.sample.com/some/test/do/%1

一切正常,直到"abcd"更改为具有 %2B 转义字符的"PjX7%2Bj69"。因此,使用此 URL:

http://www.sample.com/do/example/v1/PjX7%2Bj69

我得到:

404 Not Found | The requested URL do/example/v1/PjX7+j69 was not found on this server.

正如我们注意到的,Apache将"PjX7%2Bj69"参数更改为">PjX7 + j69"。所以我使用NE Flag来禁用解码:

RewriteRule ^(.*) http://sub.sample.com/some/test/do/%1 [NE]

但它不起作用。

如何防止 Apache URL 解码?

这不是NE标志的用途。

无论如何,这些路径应该是等效的,因为您应该在子域中解码这些序列。如果你真的无法纠正这一点,我认为这是真正的问题,你可以改用原始的、未解码的 URL:

RewriteCond %{HTTP_HOST} ^(?:www.)?sample.com$
RewriteCond %{THE_REQUEST} ^S+s+/do/(.*)s
RewriteRule ^ http://sub.sample.com/some/test/do/%1 [R,END]

最新更新