我有一个这样的网址:
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]