2011-06-29 13 views
45

Hemos algunos mod_rewrite normas muy básicas:mod_rewrite urlencoding un parámetro de cadena de consulta ya urlencoded - ¿hay alguna manera de deshabilitar esto?

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

mod_rewrite parece hacer su trabajo, y si el usuario está accediendo:

something.swf?param=value, se redirecciona correctamente a http://www.newdomain.com/something.swf?param=value

el problema es en esta situación:

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

lo que termina sucediendo es mod_rewrite takes que sobre él mismo para volver a urlencode el parámetro de cadena de consulta

así que lo que el usuario termina con es:

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

redirigido a

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

por lo que terminan con un doble-urlencoded valor. ¡bochas!

Aunque entiendo que podríamos hacer una regla \?(.*) ... ?$1 para esto, estoy pensando que debe haber una manera de decirle a mod_rewrite NO a urlencode los parámetros de cadena de consulta ... nos gustaría evitar el uso de 2 reglas desde caminos válidos son:

something.swf (no query string) 

y

something.swf?someparams... 

así que sí, a ser posible ... sólo digo mod_rewrite: por favor, no URLEncoding de parametros de cadena de consulta ... sólo de tránsito directo a través de la nueva URL R=302.

+2

doh! la respuesta es, el parámetro NE. ¡lo siento! –

+2

Está claro que sí. ¿Puedes dar una respuesta y marcarla como aceptada? (Supongo que hay un límite de tiempo para hacerlo, pero hágalo tan pronto como pueda: P) –

+0

sí, dice que necesito 100 representantes para responder mi propia pregunta en menos de 8 horas. responderé más tarde. –

Respuesta

89

la forma de lograr esto es a través del parámetro NE (sin escape).

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

debería, de hecho, leer

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

Esto obligará a mod_rewrite para dejar todos los valores de cadena de consulta como son, sin hacer ningún tipo de codificación/escape.

tan fácil como eso :)

+0

Se arregló mi problema también, gracias! – Teekin

+0

Puede haber un error asociado con esto. NE es una buena opción hasta que también tenga caracteres codificados por URL en el segmento de ruta de la URL. Ver: http://serverfault.com/questions/331899/apache-mod-rewrite-double-encodes-query-string-on-redirect – Ryan

Cuestiones relacionadas