Подтвердить что ты не робот

Mod_rewrite urlencoding уже urlencoded параметр строки запроса - любой способ отключить это?

У нас есть очень простые правила mod_rewrite:

RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,L]

mod_rewrite, похоже, выполняет свою работу, и если пользователь обращается к нему:

something.swf?param=value, он правильно перенаправляется на http://www.newdomain.com/something.swf?param=value

проблема в этой ситуации:

www.olddomain.com/something.swf?param=URL_ENCODED_VALUE

что заканчивается тем, что mod_rewrite берет его на себя, чтобы переназначить строку запроса param

так что пользователь заканчивает:

www.olddomain.com/something.swf?param=URL_ENCODED_VALUE

СОКРАЩЕНА ДЛЯ

www.newdomain.com/something.swf?param=URL_ENCODED_VALUE_OF_URL_ENCODED_VALUE

поэтому мы получим двойное urlencoded значение. boourns!

Хотя я понимаю, что мы могли бы сделать правило \?(.*)... ?$1 для этого, я думаю, что должен быть способ сообщить mod_rewrite НЕ для urlencode параметров строки запроса... мы бы хотели избежать используя 2 правила, поскольку допустимые пути:

something.swf (no query string)

и

something.swf?someparams...

так что да, в идеале... просто скажите mod_rewrite: пожалуйста, нет urlencoding параметров строки запроса... просто перетащите passthru на новый URL через R=302.

4b9b3361

Ответ 1

способ выполнить это через параметр NE (без выхода).

RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,L]

должен действительно читать

RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,NE,L]

это заставит mod_rewrite оставить все значения строки запроса так, как они есть, без какой-либо кодировки/экранирования.

так просто:)