.htaccess não está funcionando apache

135

Eu tenho um servidor do serviço AWS EC2 em execução no Linux ubuntu e instalei o apache, php e mysql.

Eu adicionei um .htaccessarquivo na raiz do meu documento /var/www/html.

Eu digitei este código nele: ErrorDocument 404 /var/www/html/404.phpe ele ainda não está aparecendo.

Eu mantive esse comando várias vezes: sudo service httpd restartpara reiniciar o servidor, mas nenhuma alteração foi exibida ...

Como posso corrigir isso ... Fiz algo errado?

Desde já, obrigado!

Shalin Shah
fonte
2
Tem certeza de que deseja mapear o 400 Bad Requesterro /var/www/html/404.php?
Jon Lin

Respostas:

288

Primeiro, observe que não é necessário reiniciar o httpd para arquivos .htaccess. Os arquivos .htaccess são especificamente para pessoas que não têm root - ou seja, não têm acesso ao arquivo de configuração do servidor httpd e não podem reiniciar o servidor. Como você pode reiniciar o servidor, não precisa de arquivos .htaccess e pode usar a configuração principal do servidor diretamente.

Em segundo lugar, se os arquivos .htaccess estiverem sendo ignorados, você precisará verificar se AllowOverride está definido corretamente. Consulte http://httpd.apache.org/docs/2.4/mod/core.html#allowoverride para obter detalhes. Você também precisa garantir que ele esteja definido no escopo correto - ou seja, no bloco certo em sua configuração. Certifique-se de que você NÃO está editando o que está no bloco, por exemplo.

Terceiro, se você quiser garantir que um arquivo .htaccess esteja de fato sendo lido, coloque lixo nele. Uma linha inválida, como "LINHA INVÁLIDA AQUI", no arquivo .htaccess, resultará em um erro de servidor 500 quando você aponta o navegador para o diretório que contém esse arquivo. Caso contrário, você não tem o AllowOverride configurado corretamente.

Rich Bowen
fonte
141
+1 por colocar lixo no arquivo .htaccess como uma ferramenta de diagnóstico.
retrohacker
46
Lixo na programação é mais útil do que parece.
EnKrypt
1
Coloquei "A STRING" no meu .htaccess, para receber um erro, coloquei AllowOverride Alltudo apache2.confno meu Debian e ele funciona
Alex
1
Observe que AllowOverridesó funciona nas <Directory>diretivas e será ignorado se colocado dentro de uma <Location ...>seção, consulte: httpd.apache.org/docs/2.4/mod/core.html#allowoverride
Daniel Sokolowski
2
Observe também que a <Directory>diretiva espera um caminho absoluto em vez de relativo. No meu caso, <Directory /> falhou enquanto <Directory /var/www/html/subdir>trabalhava.
Lukas Knuth
115
  1. Ativar o módulo mod_rewrite do Apache

    a2enmod rewrite

  2. adicione o seguinte código ao /etc/apache2/sites-available/default

    AllowOverride All

  3. Reinicie o apache

    /etc/init.d/apache2 restart

Sijo Thomas Maprayil
fonte
7
observe que no Apache 2.4 os arquivos de configuração em / etc / apache2 / sites-available devem terminar em .conf agora. E eu tinha alguma confusão no meu servidor com um default.conf em / etc / apache2 / sites-available e um em / etc / apache2 /
rubo77
2
Graças, no meu caso a reescrita não foi habilitar por padrão no apache2
Cruz
eu já sigo estas etapas, mas não está funcionando no apache 2.4 o que estou fazendo de errado = [
Luciano Andress Martini
Parece que exigir substituições de IP exige autenticação, esse comportamento é inesperado (permitir de certos ip no apache 2.2 não faça isso) e, na minha opinião, pode ser muito perigoso, porque a exceção de ip está anulando a autenticação, no apache 2.2 são coisas completamente diferentes !
Luciano Andress Martini
Omiti o primeiro passo, mas mudei AllowOverride para All no meu apache.conf (Debian 8, /etc/apache2/apache.conf), reiniciei e os arquivos não estão acessíveis, tudo bem. Mas o erro não é como permissão negada, mas 500 Internal Server Error, por que isso? Posso consertar?
DasLort #
44

Se você tentou todas as opções acima, todas válidas e boas, e seu arquivo htaccess não está funcionando ou está sendo lido, altere a diretiva no apache2.confarquivo. No Ubuntu, o caminho é/etc/apache2/apache2.conf

Altere a <Directory>diretiva apontando para suas páginas da web públicas, onde reside o arquivo htaccess. Alterar de AllowOverride NoneparaAllowOverride All

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Eu tive o mesmo problema e encontrei a resposta e a explicação no Ubuntu Ask! fórum /ubuntu/421233/enabled-htaccess-file-to-rewrite-path-not-working

user1946891
fonte
2
Em alternativa, pode ser adicionado no VHost
ssi-anik
Na verdade, somente AllowOverride FileInfoé necessário na terceira linha para que o .htaccessarquivo seja lido e usado. Alltambém permite substituições de configuração adicionais, como .httpasswd(que pode ser ativado individualmente usando em Authconfigvez de All).
Rafal
20

Para o Ubuntu,
primeiro, execute este comando: -

sudo a2enmod rewrite

Em seguida, edite o arquivo /etc/apache2/sites-available/000-default.confusando o nano ou vim usando este comando: -

sudo nano /etc/apache2/sites-available/000-default.conf

Em seguida, no 000-default.confarquivo, adicione isso após a linha DocumentRoot /var/www/html. Se o diretório raiz do html for outro, escreva o seguinte: -

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

Depois de fazer tudo, reinicie o apache usando o comando sudo service apache2 restart

Deval Khandelwal
fonte
6

Basta seguir 3 etapas

  1. Ative mode_rewrite usando o seguinte comando

    reescrever sudo a2enmod

A senha será solicitada. Então digite sua senha

  1. Atualize seu arquivo 000-default.conf ou default.conf, localizado no diretório / etc / apache2 / sites-available / . você não pode editá-lo diretamente. então use o seguinte comando para abrir

    sudo gedit /etc/apache2/sites-available/000-default.conf

Ou sudo gedit /etc/apache2/sites-available/default.conf

você vai ter

DocumentRoot / var / www / html

OU

DocumentRoot / var / www

linha. Adicione o seguinte código depois dele.

<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Torne o usuário o caminho da tag de diretório igual ao mostrado no seu arquivo.

  1. Reinicie seu servidor apache usando o seguinte comando

    serviço sudo reinício apache2

Rameshwer Dhanora
fonte
Obrigado. Saudações do Brasil.
precisa saber é o seguinte
5

Muito provavelmente, AllowOverride está definido como None. na seção Diretório do apache2.conf, localizada na pasta / etc / apache2

Tente configurá-lo para AllowOverride All

KawaiKx
fonte
5

Na minha experiência, a diretiva / var / www / directory impede diretivas de host virtual da subpasta. Portanto, se você tentou todas as sugestões e ainda não está funcionando e está usando virtualhosts, tente isso;

1 - Certifique-se de ter AllowOverride Alldiretiva em /etc/apache2/sites-available/example.com.conf

2 - Verifique as diretivas / var / www / Directory em /etc/apache2/apache2.conf(possivelmente na linha 164), o que parece;

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Se houver uma AllowOverride Nonediretiva, altere-a para AllowOverride All ou simplesmente escape da linha

Erdinç Çorbacı
fonte
3

Por padrão, o Apache proíbe o uso de um arquivo .htaccess para aplicar regras de reescrita.

Etapa 1 - Habilitando o mod_rewrite (se não estiver habilitado) Primeiro, precisamos ativar o mod_rewrite. Está disponível, mas não ativado, com uma instalação limpa do Apache 2.

$ sudo a2enmod rewrite

Isso ativará o módulo ou alertará que o módulo já está ativado. Para efetivar essas alterações, reinicie o Apache.

$ sudo systemctl restart apache2

Agora mod_rewrite está totalmente ativado. Na próxima etapa, configuraremos um arquivo .htaccess que usaremos para definir regras de reescrita para redirecionamentos.

Etapa 2 - Configurando o .htaccess Abra o arquivo de configuração padrão do Apache usando o nano ou seu editor de texto favorito.

$ sudo nano /etc/apache2/sites-available/000-default.conf

Dentro desse arquivo, você encontrará um bloco começando na primeira linha. Dentro desse bloco, adicione o novo bloco a seguir para que seu arquivo de configuração seja o seguinte. Verifique se todos os blocos estão recuados corretamente.

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
    <Directory /var/www/html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    . . . 
</VirtualHost>

Salve e feche o arquivo. Para efetivar essas alterações, reinicie o Apache.

$ sudo systemctl restart apache2

Feito. Seu .htacess deve funcionar. Este link pode realmente ajudar alguém https://www.digitalocean.com/community/tutorials/how-to-rewrite-urls-with-mod_rewrite-for-apache-on-ubuntu-16-04

Abayomi Israel
fonte
O comando de reinicialização que funcionou para mim é $ sudo httpd -k restart(Red Hat 4.4.7-23)
Himalaya Garg
3

Eu limpei esse uso. Ao usar este site, clique aqui , siga as etapas, as mesmas etapas seguem para a versão 18.04 do ubuntu

Raghul SK
fonte
1

No WampServerícone Abrir Bandeja do WampServer ----> Apache ---> Módulos Apache ---> rewrite_module

Buru
fonte
0

use RewriteBase / {sua pasta} / em seu arquivo .htaccess

miftah al rasyid
fonte
0

Para ser completo, se "AllowOverride All" não corrigir o problema, você poderá depurar esse problema usando:

  1. Execute apachectl -Se veja se você possui mais de um namevhost. Pode ser que o httpd esteja procurando .htaccess de outro DocumentRoot.

  2. Use strace -f apachectl -Xe procure de onde ele está carregando (ou não está carregando) .htaccess.

gilm
fonte