Esta é a maneira correta de ativar o htaccess no Apache 2.4.7

46

Em quase todas as soluções de "Como ativar o htaccess", eles dizem que o arquivo / etc / apache2 / sites-available / default precisa ser editado. Mas não existe esse arquivo no Apache 2.4.7

Li em algum lugar que o novo arquivo padrão é 000-default.conf. Então eu editei essa e tentei adicionar a linha:

AllowOverride All

Mas o Apache2 não foi reiniciado corretamente e deu um erro. Em uma documentação do apache2, descobri que o AllowOverride é permitido apenas na <Directory>seção. Então eu tentei adicionar isso:

<Directory "/var/www">
AllowOverride All
</Directory>

E isso parece funcionar. Mas não tenho certeza se eu deveria ter colocado / var / www lá. É uma maneira correta de fazê-lo ou meu computador explodirá de alguma forma?

CluelessNoob
fonte
Veja isso. Isso pode ajudá-lo. stackoverflow.com/questions/33062142/…
Avnish alok

Respostas:

58

tl; dr

Sim, é o caminho correto.
Mas para ser mais semântico : Sim, é a maneira correta de permitir .htaccesssubstituir todas as diretivas no /var/wwwdiretório.


Como você descobriu, AllowOverrideé permitido apenas na Directoryseção

Usando seu exemplo:

<Directory "/var/www">
    AllowOverride All
</Directory>

Isso está dizendo ao apache que todas as configurações podem ser substituídas nos /var/wwwsubdiretórios e em todos os seus subdiretórios (recursivamente).


Para um exemplo melhor, considere que você tem a seguinte configuração em seu host virtual:

<Directory "/var/www">
    AllowOverride All
</Directory>

<Directory "/var/www/uploads">
    AllowOverride Limit
</Directory>

E a seguinte estrutura de diretórios:

var/
    www/
        .htaccess
        uploads/
            .htaccess
            a/
                .htaccess
            b/
                .htaccess
        code/
            .htaccess
            c/
                .htaccess
            d/
                .htaccess

O que eu fiz aqui é criar um .htaccessem todos os subdiretórios do /var/wwwdiretório.
Geralmente não deve ser assim, mas isso é apenas por uma questão de exemplo

Comparando a estrutura de diretórios com a configuração, significa que todos os .htaccessarquivos dentro da /var/wwwpasta e seus subdiretórios, excluindo o /var/www/uploadsdiretório e seus subdiretórios, podem substituir todos os tipos de diretivas.

Mas /var/www/uploadse seus sub-diretórios só pode usar o .htaccessarquivo para substituir os Allow, Denye Orderdirectivas.

Nota: No apache 2.4 (disponível por padrão em 13.10 ou superior) Allow, as diretivas Denye Orderforam substituídas por uma única diretiva denominada Require.

Dan
fonte
39

Primeiro habilite a reescrita usando este comando:

sudo a2enmod rewrite

Em seguida, reinicie o apache2:

sudo service apache2 restart

Então vá para a sites-availablepasta:

/etc/apache2/sites-available

Edite o arquivo nomeado defaulte mude AllowOverride nonepara AllowOverride All. Existem duas linhas em que essa alteração deve ser feita.

Isso fará o .htaccesstrabalho no seu servidor VPS.

Isso funcionou em um Ubuntu 12.04.5 VPS.

q8fft
fonte
3
não existe um arquivo chamado default - mas existe um arquivo chamado 000-default.conf
Tahir Yasin
1
+1 para lembrar para ativar a reescrita, estava faltando isso e não conseguia descobrir por que não está funcionando depois de fazer todas as coisas.
Abdul Mannan 29/04
Este comentário refere-se à configuração do Apache 2.2, não 2.4. Na 2.4, o defaultarquivo é chamado 000-default.confe não contém a AllowOverride Nonelinha.
ben_nuttall
o arquivo é 000-default.confe não é possível adicionar AllowOverride Noneaqui, se você recarregar apache erro dar
Kreker
Se tudo o que você precisa é permitir que as diretivas mod_rewrite sejam substituídas .htaccess, é melhor usá-las AllowOverride FileInfo. Embora o FileInfo já inclua um grande conjunto de diretivas, você ainda estaria impedindo que muitas diretivas fossem substituídas.
Dan
3

No meu caso, funcionou assim:
tive que adicionar as seguintes linhas:

Order allow, deny
Allow from all

Então fica assim:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>
Chagas
fonte
Embora isso possa ter resolvido o seu problema, ele não está relacionado à pergunta do OP. As diretivas order e allow são diretivas no apache2.2 e versões anteriores. Eles são usados ​​para permitir / negar acesso a usuários em determinados diretórios. Eles não têm impacto se as diretivas em um arquivo .htaccess seriam analisadas ou não.
Dan
2

Aqui está um trecho de como ativar o htaccess no Apache 2.4 sem alterar a configuração padrão:

cat <<EOF> /etc/apache2/conf-available/allow-override.conf
<Directory "/var/www">
    AllowOverride all
</Directory>
EOF

a2enconf allow-override
service apache2 reload
panticz.de
fonte