Verificador de sintaxe do .htaccess

Cole o conteúdo de um arquivo .htaccess para detectar instantaneamente erros comuns: tags de bloco não fechadas, nomes de diretivas com erro de digitação, RewriteRule com poucos argumentos e linhas RewriteCond sem uma regra correspondente.

Dicas

  • Este verificador é uma análise estática heurística, linha a linha — não é um analisador real do Apache. Sempre teste em um servidor real ou ambiente de staging antes de publicar.
  • Se você tiver acesso ao terminal do servidor Apache, apachectl configtest é a verificação de sintaxe mais confiável disponível. Esta ferramenta é útil para verificações rápidas quando esse comando não está acessível, como em hospedagem compartilhada.
  • O aviso de "diretiva não reconhecida" é uma suposição de baixa confiança baseada em uma lista fixa. Se você usar uma diretiva de um módulo menos comum, esse aviso não significa necessariamente que está errado.
  • Empilhar várias linhas RewriteCond seguidas é um uso normal (elas funcionam como condições AND). Esta ferramenta só avisa quando o último RewriteCond de uma sequência não é seguido por um RewriteRule.
  • Antes de enviar para produção, aplique as mudanças aos poucos e verifique cada etapa, em vez de substituir o arquivo inteiro de uma só vez.

Perguntas frequentes

A causa mais comum é que a configuração principal do Apache tenha AllowOverride None definido para aquele diretório, o que faz o .htaccess ser completamente ignorado. Peça ao administrador do servidor para confirmar que AllowOverride All (ou pelo menos as categorias específicas que você precisa, como AuthConfig ou FileInfo) está habilitado. Também vale verificar se um cache do navegador ou de uma CDN está servindo uma versão antiga.

A forma básica é RewriteRule padrão substituição [flags]. O padrão é uma expressão regular comparada ao caminho da URL solicitada (sem a barra inicial), e a substituição pode referenciar os grupos de captura do padrão usando $1, $2 etc. As flags ficam entre colchetes, separadas por vírgulas, como [L] (parar de processar as regras seguintes) ou [R=301] (redirecionamento permanente).

Uma causa muito comum é a URL reescrita voltar a corresponder ao padrão da mesma RewriteRule, fazendo o Apache reescrevê-la repetidamente. A solução padrão é adicionar um RewriteCond como %{REQUEST_FILENAME} !-f (aplicar a regra só quando o caminho ainda não corresponder a um arquivo existente), para que a regra pare de disparar assim que o destino realmente existir.

Na maioria das hospedagens compartilhadas, todas as páginas daquele diretório passam a retornar um "500 Internal Server Error". Se você tiver acesso ao log de erros do servidor, essa é a forma mais rápida de localizar a linha e a causa exatas.

Não, isso não pode ser garantido. Esta ferramenta faz uma checagem estática heurística, linha a linha, e não reproduz totalmente o comportamento do analisador real do Apache. Se o módulo necessário (como o mod_rewrite) está carregado, ou se uma diretiva é sequer permitida naquele contexto, depende do ambiente do servidor — sempre verifique em um ambiente de staging ou no servidor real antes de confiar no resultado.
ツールくん

Curiosidade — Por que se chama ".htaccess"?

O nome ".htaccess" é a abreviação de "hypertext access" (acesso a hipertexto), e sua história remonta às primeiras versões do NCSA httpd e do Apache, por volta de 1995. Foi introduzido originalmente para permitir que donos de diretórios configurassem proteção por senha (autenticação Basic) em seu próprio espaço, sem precisar mexer no arquivo de configuração global do servidor (httpd.conf), que só o administrador podia editar.

O que torna o .htaccess poderoso é que, desde que o administrador do Apache tenha permitido isso via diretiva AllowOverride, as mudanças entram em vigor no momento em que o arquivo é enviado por FTP ou por um gerenciador de arquivos, sem necessidade de reiniciar o servidor. Isso permite que usuários de hospedagem compartilhada, que normalmente não têm acesso à configuração principal, controlem redirecionamentos, cache e restrições de acesso diretório por diretório.

Essa conveniência tem um custo, porém. A própria documentação do Apache recomenda explicitamente colocar as diretivas na configuração principal do servidor em vez de no .htaccess sempre que houver acesso para isso. O motivo é simples: o Apache precisa procurar e reler os arquivos .htaccess em cada diretório superior a cada requisição, o que gera uma sobrecarga de desempenho nada desprezível em comparação com tê-las na configuração principal.

Um erro de sintaxe também pode sair caro: em muitas hospedagens compartilhadas, um .htaccess inválido transforma todas as páginas daquele diretório em um "500 Internal Server Error" em branco, e localizar a causa exata pode consumir bastante tempo. Rodar uma checagem estática rápida como esta, além de uma revisão cuidadosa, ajuda a detectar descuidos antes que causem uma queda após a publicação.