.htaccess é ignorado mesmo que o VirtualHost tenha “AllowOverride All”

19

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 já experimentei 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 arquivos inexistentes ainda são 404. Eu também tentei isto:

order deny,allow
deny from all

Mas todas as páginas ainda estão bem. Novamente, o arquivo .htaccess é simplesmente ignorado 100%.

Colocamos nossos registros de virtualhost em /etc/httpd/conf.d/virtual.conf. Parece assim:

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 nosso servidor IGNORAR completamente o arquivo .htaccess ??

Editar:

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

Editar 2:

OK, eu tenho novas informações! Apenas para fins de teste, passei e alterei 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 eu mudei para AllowOverride All , meus arquivos .htaccess começaram a entrar em vigor. É como se todas as outras diretivas AllowOverride All em meus arquivos de configuração estivessem sendo ignoradas!

O que dá ??

    
por Brian Lacy 18.11.2010 / 19:34

3 respostas

29

Inacreditável. Lembra como eu disse isso é um servidor de desenvolvimento? Sim ... bem, aqui está a aparência real do meu 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ê isso? Bem, eu não fiz. ESQUECE Para mudar minha entrada de "Diretório" para dev.ourwebsite.com em vez de ourwebsite.com - e isso fez toda a diferença. Eu apenas presumi que o Apache teria lançado um erro se o diretório não existisse; mas isso só se aplica à diretiva DocumentRoot. é baseada em correspondência - o que significa que ela aplica as regras se corresponder à solicitação recebida, mas, por outro lado, não importa se você a informa a AllowOverride em unicórnios mágicos.

Que isto seja uma lição para qualquer outro que venha procurar - quando tudo mais falhar, considere o todo-poderoso Typo.

    
por 23.11.2010 / 18:35
4

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

    
por 18.11.2010 / 19:54
0

Três palpites:

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

Você tem uma diretiva AccessFileName em algum lugar?

Se você está usando o selinux, você tem o contexto correto para o arquivo ( ls -lZ )?

    
por 19.11.2010 / 00:32