52 votes

mod_rewrite urlencoding un paramètre de requête de chaîne de requête déjà codé en url - un moyen de le désactiver?

nous avons quelques très de base les règles de mod_rewrite:

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

mod_rewrite coutures pour faire son travail, et si l'utilisateur accède à:

quelque chose.swf?param=valeur, il est redirigée correctement http://www.newdomain.com/something.swf?param=value

le problème est dans cette situation:

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

il arrive mod_rewrite prend sur soi pour re-urlencode la querystring param

donc, ce que l'utilisateur est fin, c'est:

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

REDIRIGÉ VERS

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

on se retrouve donc avec un double-urlencoded valeur. boourns!

alors je ne comprends nous pourrions faire une \?(.*) ... ?$1 la règle pour cela, je pense, il doit y avoir un moyen de dire mod_rewrite ne PAS urlencode la chaîne de requête params... nous aimerions éviter d'utiliser 2 règles depuis chemins valides sont:

something.swf (no query string)

et

something.swf?someparams...

donc oui, idéalement... juste dire mod_rewrit: s'il vous plaît, pas d'encodage de querystring params... juste direct transitoires pour la nouvelle url à l'aide de r,302.

n'importe qui?

merci!

102voto

anonymous-one Points 2113

Le moyen 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 la chaîne de requête en l'état, sans aucun encodage / échappement.

aussi simple que ça :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X