Necesito cambiar mi .htaccess
y hay dos líneas que no entiendo.
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
¿Cuándo debería usar estas líneas?
Necesito cambiar mi .htaccess
y hay dos líneas que no entiendo.
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
¿Cuándo debería usar estas líneas?
Respuestas:
No es el lugar para dar un tutorial completo, pero aquí está en resumen;
RewriteCond básicamente significa "ejecutar la siguiente RewriteRule solo si esto es cierto". La !-l
ruta es la condición de que la solicitud no sea para un enlace ( !
significa no, -l
significa enlace)
El RewriteRule básicamente significa que si la solicitud se hace que coincide ^(.+)$
(coincide con cualquier URL excepto la raíz del servidor), se reescribirá, lo index.php?url=$1
que significa que una solicitud olle
se reescribirá como index.php?url=olle
).
QSA
significa que si se pasa una cadena de consulta con la URL original, se agregará a la reescritura ( olle?p=1
se reescribirá como index.php?url=olle&p=1
.
L
significa que si la regla coincide, no procese más RewriteRules debajo de esta.
Para obtener más información sobre esto, siga los enlaces de arriba. El soporte de reescritura puede ser un poco difícil de entender, pero hay bastantes ejemplos de stackoverflow de los que aprender.
?
a &
, por lo que es imposible distinguir entre /page&foobar
vs /page?foobar
. ¿Cómo puedo evitar que QSA reemplace ?
a &
?
Si se cumplen las siguientes condiciones, vuelva a escribir la URL:
Si el nombre de archivo solicitado no es un directorio,
RewriteCond %{REQUEST_FILENAME} !-d
y si el nombre de archivo solicitado no es un archivo normal que existe,
RewriteCond %{REQUEST_FILENAME} !-f
y si el nombre de archivo solicitado no es un enlace simbólico,
RewriteCond %{REQUEST_FILENAME} !-l
luego reescriba la URL de la siguiente manera:
Tome el nombre de archivo de la solicitud completo y proporciónelo como el valor de un parámetro de consulta "url" para index.php. Agregue cualquier cadena de consulta de la URL original como parámetros de consulta adicionales (QSA) y deje de procesar este archivo .htaccess (L).
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
Documentos de Apache #flag_qsa
Otro ejemplo:
RewriteRule "/pages/(.+)" "/page.php?page=$1" [QSA]
Con la marca [QSA], una solicitud de
/ páginas / 123? uno = dos
será asignado a
/page.php?page=123&one=two