miércoles, 17 de noviembre de 2010

Problema de URL Rewrite y Ampersand

Cuando usamos URL Rewrite en Apache, muchas veces descubrimos un problema al parsear urls que contienen un ampersand (&) en en contenido de una variable.

Ejemplo:

En el .htaccess:

RewriteRule ^test/?(.*)$ ./index.php?action=insert&data=$1 [QSA]


En el xx.php

$url=urlencode( $content );

y su correspondiente:

$data = urldecode( $_GET['data']);


Bien, ahora suponga que $content sea una página como:

http://xx.php/test/The good, the bad & the ugly


El urlencode lo codifica correctamente, pero el URL Rewrite lo parsea mal, y cuando verificamos el contenido de $data, este contiene solamente:

The good, the bad

La mejor solución que encontré ha sido incluir la tag "B" en el .htaccess, en la regla correspondiente.

Entonces, donde había:


En el .htaccess:
RewriteRule ^test/?(.*)$ ./index.php?action=insert&data=$1 [QSA] 

Cambiamos por 
RewriteRule ^test/?(.*)$ ./index.php?action=insert&data=$1 [QSA,B

Extremadamente simple, pero me ha tomado dos días encontrarle la vuelta!!!!!

sPohlmann

No hay comentarios:

Publicar un comentario