Este es un caso de "hacer una pregunta y responderla yo mismo", que estoy publicando para el beneficio de cualquier persona que tenga el mismo problema.¿Cómo puedo depurar las reglas de mod_rewrite?
Tuve algunos problemas para depurar un conjunto de reglas mod_rewrite en un archivo .htaccess en un servidor compartido, donde ni siquiera podía acceder a los registros de errores de Apache. He encontrado una manera ordenada para depurarlos, que es la siguiente:
escribir un guión corto que imprime simplemente se querystring variables. p.ej. en PHP:
<?='<pre>',htmlentities(print_r($_GET,true)),'</pre>'?>
es todo lo que necesita.
Digamos que usted nombra este script "show.php" y lo coloca en/public_html. Luego, en su archivo .htaccess, identificar el punto en su conjunto de reglas que usted piensa que podría estar causando el problema, e insertar esta regla:
RewriteRule (.*) /show.php?url=$1 [END]
el efecto es el mismo que la inserción de una instrucción PRINT en un habitual programa. Le informará que (a) llegó a ese punto en el conjunto de reglas, y (b) cuál es la URL reescrita actual.
No es tan rápido como una verdadera herramienta de depuración, pero hace el trabajo bien.
Si está utilizando Apache < 2.3.9, tendrá que usar [L]
en lugar de [END]
. En ese caso, hay que tener en cuenta que su conjunto de reglas no debe intentar reescribir "/show.php" a cualquier otra cosa. Si eso es un problema, lo puede solucionar mediante la adición de esta regla en la parte superior:
RewriteRule ^show.php$ - [L]
... Sólo recuerde que debe hacerlo cuando haya terminado de depurar!
Más técnicas útiles son [aquí] (http://stackoverflow.com/questions/9153262/tips-for-debugging-htaccess-rewrite-rules). – Doin