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