Pourquoi l'activation du journal de réécriture .htaccess ne fonctionne-t-elle pas?

9

Je souhaite activer la journalisation de la réécriture afin de pouvoir déboguer une règle de réécriture, mais l'ajout des directives RewriteLog provoque une erreur 500.

Information sur la version:

Ubuntu 14.04

Server version: Apache/2.4.12 (Ubuntu)
Server built:   Feb  4 2015 14:22:06

contenu de .htaccess

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteLog /var/log/apache2/rewrite.log
RewriteLogLevel 5

RewriteBase /

RewriteRule ^/wordpress/wp-content/(.*)$ /wp-content/$1 [L]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Dans le journal des erreurs, je vois:

/var/www/path.to/wordpress/.htaccess: Invalid command 'RewriteLog', perhaps misspelled or defined by a module not included in the server configuration
codecowboy
la source

Réponses:

14

En plus d'avoir oublié que la journalisation ne peut pas être configurée dans les .htaccessfichiers, cela s'est également avéré être un problème de version d'Apache. La directive RewriteLog a été remplacée dans les versions plus récentes et l'ajout de ce qui suit à la configuration de Virtualhost a activé le journal de réécriture pour moi:

LogLevel alert rewrite:trace3 (can be increased to trace8)

Du manuel:

Ceux qui connaissent les versions antérieures de mod_rewrite rechercheront sans aucun doute les directives RewriteLog et RewriteLogLevel. Cette fonctionnalité a été complètement remplacée par la nouvelle configuration de journalisation par module mentionnée ci-dessus.

Pour filtrer ces messages dans le journal des erreurs, vous pouvez faire quelque chose comme:

tail -f error_log|fgrep '[rewrite:'
codecowboy
la source
Votre question a été initialement taguée avec apache-2.2, n'est-ce pas? et j'ai peut-être oublié la version dans la question elle-même. Bien repéré.
HBruijn
Dans le cas où cela aiderait quelqu'un, mon problème était que j'activais la connexion dans le VHost pour le port 80 mais pas 443. J'utilisais HTTPS, donc ma journalisation n'a pas fonctionné. Cela m'a pris un certain temps pour trouver cette erreur stupide :(
BrianVPS
Je voudrais ajouter que vous devez avoir mod_log_debugactivé ...
thoni56
4

Je ne peux pas m'empêcher de me répéter:

La plupart des gens qui utilisent .htaccess et posent des questions à ce sujet sur ServerFault ne devraient pas utiliser .htaccess en premier lieu, car il s'agit d'une solution d'utilisateur final jamais destinée aux administrateurs:

Vous devez éviter d'utiliser complètement les fichiers .htaccess si vous avez accès au fichier de configuration du serveur principal httpd. L'utilisation de .htaccessfichiers ralentit votre serveur Apache http. Toute directive que vous pouvez inclure dans un fichier .htaccess est mieux définie dans un bloc d'annuaire, car elle aura le même effet avec de meilleures performances.
Source: manuel Apache

Apparemment, la plupart des personnes qui publient leurs configurations semblent être des programmeurs cultes du fret désireux de copier les fichiers .htaccess à l'aveugle sans en comprendre les raisons.

Votre problème est un excellent exemple: la RewriteLogdirective n'est valable que dans le contexte d'une configuration de serveur ou de l'hôte virtuel ...

Cela signifie que ce n'est pas autorisé dans un .htaccessfichier!

HBruijn
la source
4
La recherche de journaux est exactement ce que ferait quelqu'un qui veut apprendre, pas copier. Il semble qu'Apache ait mis en place un catch-22 classique: vous ne devez utiliser .htaccess que si vous ne pouvez pas accéder à la racine du serveur. Mais vous ne pouvez activer la journalisation que si vous pouvez accéder à la racine du serveur. S'ils vous laissent faire toute cette réécriture en .htaccess, ils devraient vous laisser enregistrer ce qu'il fait afin que vous n'ayez pas à vous fier au copier-coller aléatoire / essai et erreur.
Mark Berry
5
Certaines applications comme Wordpress génèrent des fichiers .htaccess qui doivent être débogués. Cela semble être le cas ici. La journalisation à partir d'un fichier .htaccess est une première étape logique lorsque vous essayez de déterminer les expressions régulières impénétrables de quelqu'un d'autre.
KeithL