Apache:NE标志(无转义)不能在mod_rewrite

时间:2018-05-07 08:57:23

标签: apache mod-rewrite url-rewriting urlencode urldecode

我有这样的网址:

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"改为" PjX7%2Bj69"有%2B转义字符。所以使用此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解码?

1 个答案:

答案 0 :(得分:0)

这不是NE flag的用途。

无论如何,这些路径应该是等效的,因为您应该在子域中解码这些序列。如果你真的无法纠正,我认为这是真正的问题,你可以使用原始的,未解码的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]