Pregunta

Simplemente no quiero usar el signo comercial en mi URL para poder pasar el signo comercial más abajo en mi sistema cuando se solicita un archivo.El problema es que Apache lo trata de manera diferente.no se como

Ya reescribí el archivo solicitado en index.php?url=$1 para poder ver qué era, pero si tiene un signo comercial allí, ¡no puede continuar!

¿Cómo puedo escapar del signo comercial o convertirlo en su hexadecimal igual (% 26)?

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>`
¿Fue útil?

Solución

La forma correcta de escapar del signo comercial en una cadena de consulta modificada por mod_rewrite es

%2526

si está siendo manejado por php.

Cuando Apache lo reescribe, se convierte en %2526 a %26 en qué php luego se convierte & y se almacena en la variable de consulta.

Utilizando el B La regla de reescritura también funciona, pero todos los signos más en el parámetro permanecen signos más en php.

El ejemplo del mundo real al que tuve que enfrentarme:

/group/Simon+%26+Garfunkel

Con B se reescribe a

group.php?group=Simon+%26+Garfunkel

y en php obtienes

$group="Simon+&+Garfunkel";

cuando tu querías

$group="Simon & Garfunkel"

Con B necesitas

/group/Simon%20%26%20Garfunkel

que funciona bien.

sin B usted obtiene

group.php?group=Simon%20&%20Garfunkel

y terminas con

$group="Simon ";

porque el & divide cadenas de consulta.

Pero si escapas dos veces

/group/Simon+%2526+Garfunkel

se reescribe a

group.php?group=Simon%20%26%20Garfunkel

y terminas con

$group="Simon & Garfunkel";

como se esperaba.

Si la URL NO es analizada por mod_rewrite en una "URL limpia", entonces podemos usar %26 muy bien.

Otros consejos

primero asegúrese de la dirección URL que está construyendo haber escapado el símbolo & a 26% así que no es un símbolo de unión cuando se pone a su servidor. a continuación, en su regla de reescritura agregar la etiqueta B, así que no va a convertir de nuevo a la Y:

RewriteRule ^ (. *) $ Index.php? Url = $ 1 [B, QSA, L]

Esta etiqueta B salvó mi trasero después de 2 días de tratar diferentes reglas de reescritura.

Añadir

RewriteRule ^(.*)\&(.*)$ $1\%26$2

Para sus reglas de reescritura.

Trate de poner esta regla por encima de la suya:

RewriteRule ^([^&]*)&(.*) $1\%26$2 [N]

Además, si desea enviar de vuelta al navegador una redirección con el símbolo de unión en la dirección URL puede añadir la [NE] bandera al final de la RewriteRule.

RewriteRule ^/(.*) /index.php?p=yourpage_\%26_something_else [NC,NE,R=301,L]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top