Você tem que reiniciar o apache para que as regras de reescrita no .htaccess tenham efeito?

98

Enviei meus arquivos .htaccess para os servidores de produção, mas eles não funcionam. O próximo passo seria reiniciar ou devo verificar outra coisa.

Jesse Hattabaugh
fonte

Respostas:

93

Não é necessário reiniciar para alterações em .htaccess. Outra coisa está errada.

Certifique-se de que seu .htaccess inclui a declaração

RewriteEngine em

que é necessário mesmo se também estiver presente no httpd.conf. Verifique também se .htaccess pode ser lido pelo processo httpd.
Verifique o error_log - ele informará sobre quaisquer erros no .htaccess se estiver sendo usado. Colocar um erro de sintaxe intencional em .htaccess é uma boa verificação para ter certeza de que o arquivo está sendo usado - você deve obter um erro 500 em qualquer página no mesmo diretório.

Por último, você pode habilitar um registro de reescrita usando comandos como os seguintes em seu httpd.conf:

RewriteLog "logs / rewritelog"

RewriteLogLevel 7

O arquivo de log gerado assim lhe dará os detalhes sangrentos de quais regras de reescrita coincidem e como elas foram tratadas.

TomG
fonte
3
Isso está um pouco desatualizado. Eu tive um problema semelhante e queria depurar minhas reescritas para um caso de uso específico. Eu tentei esse método, mas depois de um pouco de frustração e escavação, descobri qual era o problema. Isso é para versões mais antigas do apache. Para apache2.4> substituir o RewriteLog & LogLevel acima, com: LogLevel alert rewrite:trace7. Depois de reiniciar o apache , você deve ver os rastros no error.log Espero que isso ajude. http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging
Casper Wilkes
52

Não :

O Apache permite o gerenciamento descentralizado da configuração por meio de arquivos especiais colocados dentro da árvore da web. Os arquivos especiais são normalmente chamados .htaccess, mas qualquer nome pode ser especificado na diretiva AccessFileName ... Como os arquivos .htaccess são lidos em cada solicitação, as alterações feitas nesses arquivos têm efeito imediato ...

Milen A. Radev
fonte
Se você adicionou o nome de usuário a 'Exigir usuário' no arquivo habilitado para sites, descobri empiricamente que você precisa reiniciar. Um gracioso faz isso.
Ross
18

Da documentação do apache: Mais comumente, o problema é que AllowOverride não está definido de forma que suas diretivas de configuração sejam honradas. Certifique-se de que você não tenha AllowOverride None em vigor para o escopo do arquivo em questão. Um bom teste para isso é colocar lixo em seu arquivo .htaccess e recarregar. Se um erro de servidor não for gerado, é quase certo que você tenha AllowOverride None em vigor.

PiedPiper
fonte
1
Removendo link para Apache - AllowOverride: httpd.apache.org/docs/2.2/mod/core.html#AllowOverride
scunliffe
2
Eu adiciono esta linha "<diretório /> </directory>" ao meu .htaccess para gerar um erro no log. Ele dirá "<Diretório não permitido aqui" e sei que ele está lendo meu arquivo.
Mnebuerquo
3

Somente se você não adicionou o módulo mod_rewrite ao Apache.

Você só precisa reiniciar o Apache se alterar qualquer arquivo ".conf" do Apache.

etíreo
fonte
2

Eu tenho o mesmo problema e parece que a postagem do PiedPiper sobre AllowOverride foi muito útil. Verifique seu arquivo httpd.conf para "AllowOverride" e certifique-se de que esteja definido como All.

Dave Ip
fonte
1
Postagem relevante: Como definir AllowOverride all
Zach Saucier
2

No caso de .htaccess, o reinício não é necessário se não estiver funcionando, os motivos prováveis ​​incluem.

  • AllowOverride Não pode ser definido qual usuário pode definir dentro de httpd.conf ou pode ter que entrar em contato com o administrador do servidor.

  • Verifique o nome do arquivo .htaccess. Deve ser .htaccess e não htaccess.txt. Veja aqui o guia de como criar um.

  • Tente usar Options -Indexesou deny alltipo de directiva simples para ver se ele está funcionando ou não.

  • limpe o cache do navegador todas as vezes se houver regra para redirecionamentos ou semelhante, se o redirecionamento anterior estiver armazenado em cache, parece que as coisas não estão funcionando.

Abhishek Gurjar
fonte
0

O que está em seu .htaccess? RewriteRules? Verifique se mod_rewrite está instalado e ativado.

Outras coisas? Tente definir AllowOverride como 'all' nesse diretório.

ceejayoz
fonte