web-dev-qa-db-fra.com

Comment déboguer Apache mod_rewrite

J'ai deux problèmes principaux avec mod_rewrite:

1) Il n'y a pas d'erreur significative signalée quand j'ai une règle invalide

enter image description here

2) Pour tester chaque modification de manière fiable, je dois effacer le cache de chrome. Ce n'est pas sorcier, mais je dois appuyer sur Ctrl + Maj + Suppr, puis cliquer sur OK, puis fermer la fenêtre et recharger.

J'aimerais savoir si certains gourous sont disposés à partager leurs secrets pour gérer efficacement le code mod_rewrite.

159
puk

Une astuce consiste à activer le journal de réécriture. Pour l'activer, essayez ces lignes dans votre configuration principale Apache ou dans votre fichier d'hôte virtuel actuel ( et non dans .htaccess):

RewriteEngine On
RewriteLog "/var/log/Apache2/rewrite.log"
RewriteLogLevel 3

Depuis Apache httpd 2.4 mod_rewrite Les directives RewriteLog et RewriteLogLevel ont été complètement remplacées par la nouvelle configuration de journalisation par module.

LogLevel alert rewrite:trace6
265
Ben

La directive LogRewrite mentionnée par Ben n’est plus disponible dans Apache 2.4. Vous devez plutôt utiliser la directive LogLevel. Par exemple.

LogLevel alert rewrite:trace6

Voir http://httpd.Apache.org/docs/2.4/mod/mod_rewrite.html#logging

122
Tobias Schultze

Pour une résolution d'URL de base, utilisez un outil de récupération de ligne de commande tel que wget ou curl pour effectuer le test, plutôt qu'un navigateur manuel. Ensuite, vous ne devez effacer aucune mémoire cache; Il suffit de lever la flèche et entrez dans un shell pour réexécuter vos résultats de test.

24
Kaz

Il y a le testeur htaccess .

Il montre quelles conditions ont été testées pour une certaine URL, lesquelles remplissaient les critères et quelles règles étaient exécutées.

Il semble y avoir quelques problèmes, cependant.

10
Andy

Sur la base de réponse de Ben , vous pouvez effectuer les opérations suivantes lors de l'exécution d'Apache sous Linux (Debian dans mon cas).

Commencez par créer le fichier rewrite-log.load

/etc/Apache2/mods-disponible/rewrite-log.load

RewriteLog "/var/log/Apache2/rewrite.log"
RewriteLogLevel 3

Puis entrez

$ a2enmod rewrite-log

suivi par

$ service Apache2 redémarrer

Et quand vous avez fini de déboguer vos règles de réécriture

$ a2dismod rewrite-log && service Apache2 restart

3
Flow