Por que ativar o log de reescrita .htaccess não está funcionando?

9

Desejo habilitar o registro de reescrita para que eu possa depurar uma regra de reescrita, mas adicionar as diretivas RewriteLog está causando um erro 500.

Versão informação:

Ubuntu 14.04

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

conteúdo 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>

No log de erros, vejo:

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

Respostas:

14

Além de esquecer que o log não pode ser configurado nos .htaccessarquivos, isso também se mostrou um problema de versão do Apache. A diretiva RewriteLog foi substituída em versões mais recentes e adicionar o seguinte à configuração do Virtualhost habilitou o registro de reescrita para mim:

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

Do manual:

Aqueles familiarizados com as versões anteriores do mod_rewrite, sem dúvida, procurarão as diretivas RewriteLog e RewriteLogLevel. Essa funcionalidade foi completamente substituída pela nova configuração de log por módulo mencionada acima.

Para filtrar essas mensagens no log de erros, você pode fazer algo como:

tail -f error_log|fgrep '[rewrite:'
codecowboy
fonte
Sua pergunta foi originalmente marcada com apache-2.2, certo? e eu posso ter esquecido a versão na própria pergunta. Bem manchado.
HBruijn
Caso isso ajude alguém, meu problema era que eu estava habilitando o log no VHost para a porta 80, mas não o 443. Eu estava usando HTTPS, portanto, meu log não funcionou. Levei um tempo para descobrir que erro estúpido :(
BrianVPS
Gostaria de acrescentar que você precisa mod_log_debughabilitar ... #
thoni56
4

Não posso deixar de me repetir:

A maioria das pessoas que usam .htaccess e perguntam sobre isso no ServerFault não deve estar usando .htaccess em primeiro lugar, pois é uma solução para o usuário final que nunca se destina a administradores:

Você deve evitar o uso completo dos arquivos .htaccess se tiver acesso ao arquivo de configuração do servidor principal httpd. O uso de .htaccessarquivos torna seu servidor http Apache lento. Qualquer diretiva que você possa incluir em um arquivo .htaccess é melhor configurada em um bloco de Diretório, pois terá o mesmo efeito com melhor desempenho.
Fonte: Manual do Apache

Aparentemente, a maioria das pessoas que publica suas configurações parece ser programadora de cultos interessados ​​em copiar arquivos .htaccess cegamente, sem entender os motivos.

Seu problema é um excelente exemplo: a RewriteLogdiretiva é válida apenas no contexto de uma configuração de servidor ou host virtual ...

Isso significa que não é permitido em um .htaccessarquivo!

HBruijn
fonte
4
Procurar logs é exatamente o que alguém que deseja aprender, e não copiar, faria. Parece que o Apache configurou um catch-22 clássico: você só deve usar .htaccess se não puder acessar a raiz do servidor. Mas você só pode ativar o log se puder acessar a raiz do servidor. Se eles permitirem que você reescreva tudo isso em .htaccess, deverão registrar o que está fazendo, para que você não precise confiar na cópia aleatória e colar / tentativa e erro.
Mark Berry
5
Alguns aplicativos como o Wordpress geram arquivos .htaccess que precisam ser depurados. Este parece ser o caso aqui. O log de um arquivo .htaccess é uma primeira etapa lógica quando você está tentando descobrir as expressões regulares inescrutáveis ​​de outra pessoa.
precisa saber é