Muchos carteles tienen problemas para depurar sus declaraciones RewriteRule y RewriteCond dentro de sus .htaccess
archivos. La mayoría de estos están utilizando un servicio de alojamiento compartido y, por lo tanto, no tienen acceso a la configuración del servidor raíz. No pueden evitar el uso de .htaccess
archivos para reescribir y no pueden habilitar un RewriteLogLevel ", como sugieren muchos encuestados. Además, hay muchas .htaccess
dificultades y restricciones específicas que no se cubren bien. Configurar una pila LAMP de prueba local implica demasiada curva de aprendizaje para la mayoría .
Así que mi Q aquí es cómo se lo recomendamos que depurar sus reglas propias . Proporciono algunas sugerencias a continuación. Se agradecerán otras sugerencias.
Comprenda que el motor mod_rewrite recorre los
.htaccess
archivos . El motor ejecuta este bucle:do execute server and vhost rewrites (in the Apache Virtual Host Config) find the lowest "Per Dir" .htaccess file on the file path with rewrites enabled if found(.htaccess) execute .htaccess rewrites (in the user's directory) while rewrite occurred
Por lo tanto, sus reglas se ejecutarán repetidamente y si cambia la ruta de URI, puede terminar ejecutando otros
.htaccess
archivos si existen. Por lo tanto, asegúrese de terminar este ciclo, si es necesario agregando másRewriteCond
para detener el disparo de las reglas. Elimine también cualquier.htaccess
conjunto de reglas de reescritura de nivel inferior a menos que tenga la intención explícita de utilizar conjuntos de reglas de varios niveles.Asegúrese de que la sintaxis de cada Regexp sea correcta probando contra un conjunto de patrones de prueba para asegurarse de que sea una sintaxis válida y haga lo que pretende con un rango completo de URI de prueba. Vea la respuesta a continuación para más detalles.
Desarrolle sus reglas de forma incremental en un directorio de prueba. Puede utilizar la función "Ejecutar el
.htaccess
archivo más profundo en la ruta" para configurar un directorio de prueba (árbol) y conjuntos de reglas de depuración separados aquí sin arruinar sus reglas principales y dejar de funcionar su sitio. Debe agregarlos uno a la vez porque esta es la única forma de localizar fallas en las reglas individuales.Use un código auxiliar de script ficticio para volcar las variables de entorno y servidor . (Consulte el Listado 2 ) Si su aplicación usa, por ejemplo,
blog/index.php
puede copiar estotest/blog/index.php
y usarlo para probar las reglas de su blog en eltest
subdirectorio. También puede usar variables de entorno para asegurarse de que el motor de reescritura interprete las cadenas de sustitución correctamente, p. Ej.RewriteRule ^(.*) - [E=TEST0:%{DOCUMENT_ROOT}/blog/html_cache/$1.html]
y busque estas variables REDIRECT_ * en el volcado phpinfo. Por cierto, usé este y descubrí en mi sitio que tenía que usar
%{ENV:DOCUMENT_ROOT_REAL}
en su lugar. En el caso del redireccionamiento en bucle, las variables REDIRECT_REDIRECT_ * enumeran el pase anterior. Etc ..Asegúrese de que su navegador no lo muerda al almacenar en caché redirecciones 301 incorrectas . Ver la respuesta a continuación . Mi agradecimiento a Ulrich Palha por esto.
El motor de reescritura parece sensible a las reglas en cascada dentro de un
.htaccess
contexto, (ahí es donde seRewriteRule
produce una sustitución y esto recae en otras reglas), ya que encontré errores con solicitudes secundarias internas (1) y un procesamiento incorrecto de PATH_INFO que a menudo puede se evita mediante el uso de los indicadores [NS], [L] y [PT].
¿Algún comentario o sugerencia más?
Listado 1 - phpinfo
<?php phpinfo(INFO_ENVIRONMENT|INFO_VARIABLES);