У нас есть очень простые правила 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
.