Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

mod_rewrite urlencoding an already urlencoded query string parameter - any way to disable this?

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.

like image 276
anonymous-one Avatar asked Jun 29 '11 12:06

anonymous-one


1 Answers

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 :)

like image 166
anonymous-one Avatar answered Nov 06 '22 13:11

anonymous-one