web-dev-qa-db-fra.com

mod_rewrite urlencoding un paramètre de chaîne de requête déjà urlencodé - une manière de le désactiver?

Nous avons des règles mod_rewrite très basiques:

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

mod_rewrite semble faire son travail, et si l'utilisateur accède:

something.swf?param=value, Il est correctement redirigé vers http://www.newdomain.com/something.swf?param=value

le problème est dans cette situation:

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

ce qui finit par se produire est que mod_rewrite se charge de ré-encoder le paramètre de chaîne de requête

donc ce que l'utilisateur se retrouve avec:

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

REDIRIGÉ VERS

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

nous nous retrouvons donc avec une valeur à double URL. pleure!

Bien que je comprenne que nous pourrions créer une règle \?(.*) ... ?$1 Pour cela, je pense qu'il doit y avoir un moyen de dire à mod_rewrite de ne pas encoder en url les paramètres de la chaîne de requête ... nous aimerait éviter d'utiliser 2 règles car les chemins valides sont:

something.swf (no query string)

et

something.swf?someparams...

alors oui, idéalement ... dites simplement à mod_rewrite: s'il vous plaît, pas d'urlencodage des paramètres de chaîne de requête ... dirigez simplement le passthru vers la nouvelle URL via R=302.

51
anonymous-one

la manière d'y parvenir est via le paramètre NE (no escape).

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

devrait en fait lire

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

cela forcera mod_rewrite à laisser toutes les valeurs de chaîne de requête telles quelles, sans faire d'encodage/d'échappement.

aussi simple que ça :)

100
anonymous-one