¿Por qué no está habilitado el inicio de sesión de reescritura.

9

Quiero habilitar el registro de reescritura para poder depurar una regla de reescritura, pero agregar las directivas RewriteLog está causando un error 500.

Información de versión:

Ubuntu 14.04

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

contenido 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>

En el registro de errores veo:

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

Respuestas:

14

Además de haber olvidado que el registro no se puede configurar en .htaccessarchivos, esto también resultó ser un problema de la versión de Apache. La directiva RewriteLog ha sido reemplazada en versiones más nuevas y agregar lo siguiente a la configuración de Virtualhost habilitó el registro de reescritura para mí:

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

Del manual:

Aquellos familiarizados con versiones anteriores de mod_rewrite sin duda estarán buscando las directivas RewriteLog y RewriteLogLevel. Esta funcionalidad ha sido completamente reemplazada por la nueva configuración de registro por módulo mencionada anteriormente.

Para filtrar estos mensajes en el registro de errores, puede hacer algo como:

tail -f error_log|fgrep '[rewrite:'
codecowboy
fuente
Su pregunta fue originalmente etiquetada con apache-2.2 ¿verdad? y puedo haber pasado por alto la versión en la pregunta misma. Bien descrito.
HBruijn
En caso de que esto ayude a alguien, mi problema fue que estaba habilitando el inicio de sesión en el VHost para el puerto 80 pero no 443. Estaba usando HTTPS, por lo que mi registro no funcionó. Me tomó un tiempo encontrar ese estúpido error :(
BrianVPS
Me gustaría agregar que debes haber mod_log_debughabilitado ...
thoni56
4

No puedo evitar repetirme:

La mayoría de las personas que usan .htaccess y preguntan al respecto en ServerFault no deberían usar .htaccess en primer lugar, ya que es una solución de usuario final nunca destinada a administradores:

Debe evitar usar archivos .htaccess por completo si tiene acceso al archivo de configuración del servidor principal httpd. El uso de .htaccessarchivos ralentiza su servidor http Apache. Cualquier directiva que pueda incluir en un archivo .htaccess se configura mejor en un bloque de Directorio, ya que tendrá el mismo efecto con un mejor rendimiento.
Fuente: manual de Apache

Aparentemente, la mayoría de las personas que publican sus configuraciones parecen ser programadores de culto a la carga interesados ​​en copiar archivos .htaccess a ciegas sin comprender las razones.

Su problema es un buen ejemplo: la RewriteLogdirectiva solo es válida en el contexto de una configuración de servidor o el host virtual ...

¡Eso significa que no está permitido en un .htaccessarchivo!

HBruijn
fuente
44
Buscar registros es exactamente lo que haría alguien que quiera aprender, no copiar. Parece que Apache ha configurado un clásico catch-22: solo debe usar .htaccess si no puede acceder a la raíz del servidor. Pero solo puede activar el registro si puede acceder a la raíz del servidor. Si le permiten hacer toda esta reescritura en .htaccess, deberían permitirle registrar lo que está haciendo para que no tenga que confiar en copiar y pegar al azar / prueba y error.
Mark Berry
55
Algunas aplicaciones como Wordpress generan archivos .htaccess que necesitan depurarse. Este parece ser el caso aquí. Iniciar sesión desde un archivo .htaccess es un primer paso lógico cuando intenta resolver las expresiones regulares inescrutables de otra persona.
KeithL