We have some very basic mod_rewrite rules:
RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,L]
mod_rewrite seems to do its job, and if the user is accessing:
something.swf?param=value
, it is redirected correctly to http://www.newdomain.com/something.swf?param=value
the problem is in this situation:
www.olddomain.com/something.swf?param=URL_ENCODED_VALUE
what ends up happening is mod_rewrite takes it upon it self to re-urlencode the query string param
so what the user ends up with is:
www.olddomain.com/something.swf?param=URL_ENCODED_VALUE
REDIRECTED TO
www.newdomain.com/something.swf?param=URL_ENCODED_VALUE_OF_URL_ENCODED_VALUE
so we end up with a double-urlencoded value. boourns!
While I do understand we could make a \?(.*)
... ?$1
rule for this, I am thinking there must be a way to tell mod_rewrite NOT to urlencode the query string params... we would like to avoid using 2 rules since valid paths are:
something.swf (no query string)
and
something.swf?someparams...
so yea, ideally... just tell mod_rewrite: please, no urlencoding of query string params... just direct passthru to the new URL via R=302
.
the way to accomplish this is via the NE (no escape) paramater.
RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,L]
should in fact read
RewriteRule ^something.swf$ http://www.newdomain.com/something.swf [R=302,NE,L]
this will force mod_rewrite to leave all query string values as they are, without doing any encoding / escaping.
as easy as that :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With