.htaccess é ignorado mesmo que o VirtualHost tenha "AllowOverride All"

25

Estou executando um servidor LAMP no Fedora 13 que está funcionando bem; no entanto, acabei de adicionar um arquivo ".htaccess" à pasta docroot do meu site atual que está sendo completamente ignorada.

Eu tentei meia dúzia de testes diferentes, incluindo este:

RewriteEngine on
RewriteBase /

RewriteRule ^.*$ index.php

Mas as imagens e todas as outras páginas carregam bem, e os arquivos inexistentes ainda são 404. Eu também tentei isso:

order deny,allow
deny from all

Mas cada página ainda carrega muito bem. Novamente, o arquivo .htaccess é simplesmente ignorado 100%.

Colocamos nossos registros de host virtual em /etc/httpd/conf.d/virtual.conf. Se parece com isso:

NameVirtualHost *

<VirtualHost *>
    ServerName              intranet
    DocumentRoot            /var/www/default
    <Directory "/var/www/default">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *>
    ServerName              ourwebsite.com
    DocumentRoot            /var/www/html/ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

O que mais poderia estar causando o nosso servidor ignorar completamente o .htaccessarquivo?

Editar:

Alterei o arquivo .htaccess para acima para demonstrar melhor que minhas alterações estão sendo ignoradas. Observe que eu tentei exatamente o mesmo arquivo .htaccess no servidor de produção e funcionou bem.

Edição 2:

OK, tenho novas informações! Apenas para fins de teste, eu passei e mudei temporariamente TODAS as diretivas "AllowOverride" para AllowOverride All. Eu descobri que a primeira entrada do Diretório parece dominar todas as outras:

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

Quando mudei isso para AllowOverride All, meus arquivos .htaccess começam a entrar em vigor. É como se todas as outras AllowOverride Alldiretivas nos meus arquivos de configuração estivessem sendo ignoradas!

O que da??

Brian Lacy
fonte

Respostas:

32

Inacreditável. Lembra como eu disse que este é um servidor de desenvolvimento? Sim ... bem, aqui está a aparência da minha entrada de host virtual:

<VirtualHost *>
    ServerName              dev.ourwebsite.com
    DocumentRoot            /var/www/html/dev.ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Você vê? Bem, eu não fiz. ESQUECI DE MUDAR minha entrada "Diretório" para dev.ourwebsite.com em vez de ourwebsite.com - e isso fez toda a diferença. Apenas assumi que o Apache teria emitido um erro se o diretório não existisse; mas isso se aplica apenas à diretiva DocumentRoot. é baseado em correspondência - o que significa que aplica as regras se corresponder à solicitação recebida, mas, caso contrário, não importa se você pedir para AllowOverride em unicórnios mágicos.

Que isso seja uma lição para qualquer um que vier procurar - quando tudo mais falhar, considere o todo-poderoso Typo.

Brian Lacy
fonte
Eu nunca em um milhão de anos teria pego isso! Também tive um erro de digitação no caminho do Diretório, também um projeto de desenvolvimento ... Obrigado por abrir meus olhos.
Glltech #
Eu também tive um erro de digitação na parte do diretório. Realmente, isso foi tão frustrante. Foi uma bênção que eu vim através disso e soube que eu posso cometer erros super bobos.
Akash Kumar Sharma
Eu sei que já faz 7 anos, mas eu só queria aparecer e dizer que essa resposta me ajudou. Era o mesmo tipo de coisa. Copiei as diretivas de um host virtual diferente e alterei o bit errado. Obrigado por compartilhar esta informação! Navegue com sabedoria.
dolst
5

Verifique se há outro "AllowOverride None" apresentado em 'httpd.conf' acima da declaração virtualhosts. Provavelmente, você tem "AllowOverride None" no docroot.

Denis
fonte
O servidor com o qual estou trabalhando é um servidor de desenvolvimento e é uma duplicata exata do nosso servidor de produção. Os arquivos httpd.conf são praticamente idênticos. A ÚNICA diferença significativa é que nosso "virtual.conf" neste servidor possui menos entradas e cada site é prefixado dev.. No entanto, o servidor de produção funciona bem, os arquivos .htaccess se comportam exatamente como o esperado e o servidor de desenvolvimento simplesmente ignora completamente o arquivo .htaccess.
Brian Lacy
0

Três palpites:

Existe realmente um espaço após a vírgula na linha order deny, allowem .htaccess? O Apache não gosta disso. Para mim, na F13, eu ganhei 500.

Você tem uma AccessFileNamediretiva em algum lugar?

Se você estiver usando o selinux, possui o contexto correto para o arquivo ( ls -lZ)?

Mark Wagner
fonte
Não estou recebendo 500 erros. O arquivo .htaccess é simplesmente ignorado. E verifiquei que não tinha espaço lá de qualquer maneira. Não sei nada sobre selinux ou contextos, mas procurei como verificar e, aparentemente, está desativado. Quanto a AccessFileName, vou dar uma olhada, mas como disse no meu comentário sobre a resposta de Denis, a configuração do apache para esses dois servidores é efetivamente idêntica.
Brian Lacy
Eu também tive problemas com o espaço. Isso me deixou louco.
egorgry
Ops, correção: Eu tenho uma diretiva AccessFileName no meu httpd.conf. É o seguinte:AccessFileName .htaccess
Brian Lacy
0

Eu tinha isso em um servidor novo, e finalmente percebi que a reescrita de mod não estava ativada por padrão.

ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
jmullee
fonte