203 votes

Comment déboguer le mod_rewrite d'Apache ?

J'ai deux problèmes principaux avec mod_rewrite :

  1. Aucune erreur significative n'est signalée lorsque la règle est invalide.

    Enter image description here

  2. Pour tester de manière fiable chaque modification, je dois effacer le cache de Google Chrome. Ce n'est pas sorcier, mais je dois taper Ctrl + Shift + Delete , cliquez OK et fermez la fenêtre, puis rechargez.

J'aimerais savoir si l'un des gourous est prêt à partager ses secrets pour gérer efficacement le code mod_rewrite.

1 votes

Puk, voir stackoverflow.com/questions/9153262/ où je discute de certaines astuces de stanbdard.

0 votes

308voto

Ben Points 1425

Une astuce consiste à activer le journal de réécriture. Pour l'activer, essayez cette ligne dans votre configuration principale du serveur HTTP Apache ou dans le fichier d'hôte virtuel actuel ( pas en .htaccess ) :

LogLevel alert rewrite:trace6

Avant Apache httpd 2.4 mod_rewrite En effet, une telle configuration de journalisation par module n'existait pas encore. À la place, vous pouvez utiliser les paramètres de journalisation suivants :

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

1 votes

Merci. Ce n'est pas ce que je recherchais, mais c'est toujours mieux que rien.

84 votes

Vous ne pouvez pas mettre cela dans le fichier .htaccess. Vous devez le mettre dans la configuration du VirtualHost.

2 votes

Vous ne pouvez pas le faire dans .htaccess . RewriteLog y RewriteLogLevel sont disponibles uniquement dans le contexte de la configuration du serveur et de l'hôte virtuel.

156voto

Tobias Schultze Points 271

La directive RewriteLog comme mentionné par Ben n'est plus disponible dans Apache 2.4.

Vous devez utiliser la directive LogLevel à la place. Par exemple,

LogLevel alert rewrite:trace6

Voir _Module Apache mod_rewrite, Journalisation_ .

24 votes

Où se trouve le fichier journal associé à cette opération ?

9 votes

@CharlesJohnThompsonIII - Le fichier journal est le journal des erreurs (spécifié par la directive ErrorLog). Selon la documentation, vous pouvez obtenir uniquement les messages de réécriture avec grep : tail -f error_log|fgrep '[rewrite:'

2 votes

N'oubliez pas de redémarrer apache

30voto

Kaz Points 18072

Pour la résolution d'URL de base, utilisez un récupérateur en ligne de commande tel que wget o curl pour effectuer les tests, plutôt qu'un navigateur manuel. Vous n'avez pas besoin de vider le cache ; il suffit de up arrow et appuyez sur Enter dans un shell pour réexécuter vos tests de recherche.

14 votes

Une autre astuce consiste à utiliser le "mode porno" de Chrome (Ctl+Shift+N). Lorsque vous fermez la fenêtre, tout contexte de session mis en cache est mis à la poubelle.

0 votes

Je pense que la navigation en "session privée" de Firefox aussi. Mais vous dites que ce contexte est par fenêtre individuelle (donc vous ne fermez pas Chrome ?)

2 votes

À ma connaissance, Chrome et Ff sont différents dans la mesure où Ff s'exécute comme un seul processus, qu'il soit en mode privé ou non. Avec Chrome, chaque onglet ou fenêtre s'exécute comme un processus séparé et peut être individuellement en mode privé ; fermez une fenêtre/un onglet privé et son contexte est mis à la corbeille.

24voto

Andy Points 369

Il y a le Testeur de htaccess .

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

Il semble y avoir quelques problèmes, cependant.

3voto

Flow Points 8018

Sur la base de La réponse de Ben vous pouvez faire ce qui suit lorsque vous utilisez Apache sous Linux (Debian dans mon cas).

Créez d'abord le fichier rewrite-log.load .

/etc/apache2/mods-availabe/rewrite-log.load

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

Ensuite, entrez

$ a2enmod rewrite-log

suivi par

$ service apache2 restart

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

$ a2dismod rewrite-log && service apache2 restart

0 votes

Cela n'a pas fonctionné. J'obtiens sandino@envy:~$ sudo service apache2 restart * Restarting web server apache2 [fail] * The apache2 configtest failed. La sortie du test de configuration était : AH00526 : Erreur de syntaxe sur la ligne 1 de /etc/apache2/mods-enabled/rewrite-log.load : Commande invalide 'RewriteLog', peut-être mal orthographiée ou définie par un module non inclus dans la configuration du serveur.

4 votes

@sandino, quelle version d'apache utilisez-vous ? Il semble que cette syntaxe ait été modifiée pour la 2.4, utilisez plutôt : LogLevel warn rewrite:trace8 o LogLevel info rewrite:trace8 où 8 peut être un nombre quelconque compris entre 1 et 8

0 votes

AH00526 : Erreur de syntaxe sur la ligne 1 de /etc/apache2/mods-enabled/rewrite Commande invalide 'RewriteLog'.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X