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

ApacheMod Rewrite

Apache Problem Overview


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.

Apache Solutions


Solution 1 - Apache

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionanonymous-oneView Question on Stackoverflow
Solution 1 - Apacheanonymous-oneView Answer on Stackoverflow