Saltar al contenido

¿Cómo codificar caracteres especiales usando mod_rewrite y Apache?

Después de de esta extensa selección de información dimos con la solución este enigma que suelen tener algunos de nuestros lectores. Te ofrecemos la solución y nuestro objetivo es resultarte de mucha apoyo.

Solución:

El funcionamiento normal de apache / mod_rewrite no funciona así, ya que parece convertir los signos más en espacios.

No creo que eso sea exactamente lo que está sucediendo. Apache está decodificando% 2Bs a + s en la parte de la ruta, ya que + es un carácter válido allí. Hace esto antes de dejar que mod_rewrite mire la solicitud.

Entonces mod_rewrite cambia su solicitud ‘/ tag / c ++’ a ‘script.php? Tag = c ++’. Pero en una consulta string componente en el formato application / x-www-form-encoded, las reglas de escape son ligeramente diferentes a las que se aplican en las partes de la ruta. En particular, ‘+’ es una abreviatura de espacio (que bien podría codificarse como ‘% 20’, pero este es un comportamiento antiguo que nunca podremos cambiar ahora).

Entonces, el código de lectura de formularios de PHP recibe el ‘c ++’ y lo descarga en su _GET como C-space-space.

Parece que la forma de evitar esto es usar la reescritura de la bandera ‘B’. Vea http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriteflags – ¡curiosamente usa más o menos el mismo ejemplo!

RewriteRule ^tag/(.*)$ /script.php?tag=$1 [B]

No estoy seguro de entender lo que estás preguntando, pero el NE (noescape) bandera a Apache RewriteRule La directiva puede ser de su interés. Básicamente, previene mod_rewrite de escapar automáticamente los caracteres especiales en el patrón de sustitución que proporcione. El ejemplo dado en la documentación de Apache 2.2 es

RewriteRule /foo/(.*) /bar/arg=P1%3d$1 [R,NE]

que se convertirá, por ejemplo, /foo/zed en una redirección a /bar/arg=P1%3dzed, para que el guión /bar luego verá un parámetro de consulta llamado arg con un valor P1=zed, si mira en su PATH_INFO (está bien, eso no es un verdadero parámetro de consulta, así que demandame ;-P).

Al menos, creo que así es como funciona. . . Yo nunca he usado esa bandera en particular.

Puntuaciones y reseñas

Si tienes alguna vacilación y forma de progresar nuestro escrito eres capaz de añadir una acotación y con mucho placer lo observaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *