Apache: флаг NE (без выхода) не работает в RewriteRule mod_rewrite - PullRequest
0 голосов
/ 07 мая 2018

У меня есть такой URL:

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 голосов
/ 07 мая 2018

Это не то, для чего установлен флаг 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]
...