Eu tenho uma nova instalação do Apache 2.2 na minha máquina Vista, tudo funciona bem, exceto a reescrita de mod.
Eu descomentei
LoadModule rewrite_module modules/mod_rewrite.s
mas nenhuma das minhas regras de reescrita funciona, mesmo as simples
RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404
Todas as regras que estou usando estão trabalhando na minha hospedagem, então elas devem ficar bem, então minha pergunta é: existe algo oculto na configuração do apache que possa bloquear a reescrita de mods?
apache
mod-rewrite
Jakub Arnold
fonte
fonte
AllowOverride FileInfo
vez de permitir tudo, como sugerem TODAS as respostas nesta página. É triste ver todas essas respostas seguirem a abordagem "como está tudo funciona", em vez de tentar entender as consequências da "solução" proposta. Tente entender o que você está fazendo no seu servidor e como limitar os privilégios que acabou de cederAllowOverride All
. RTFM! , é bem claro sobre o assunto.Respostas:
Para usar,
mod_rewrite
você pode digitar o seguinte comando no terminal:Reinicie o apache2 depois
ou
ou de acordo com a nova maneira unificada de controle do sistema
Em seguida, se desejar, você pode usar o seguinte
.htaccess
arquivo.O
.htaccess
arquivo acima (se colocado no seuDocumentRoot
) redirecionará todo o tráfego para umindex.php
arquivo no diretórioDocumentRoot
menos que ele exista.Então, digamos que você tenha a seguinte estrutura de diretórios e httpdocs é o
DocumentRoot
Qualquer arquivo que exista nos httpdocs será enviado ao solicitante usando o
.htaccess
mostrado acima; no entanto, todo o resto será redirecionado parahttpdocs/index.php
. Os arquivos do seu aplicativoincludes/app
não estarão acessíveis.fonte
AllowOverride All
em ordem para que o.htaccess
arquivo seja lido.a2enmod rewrite
no windows?Para a minha situação, eu tinha
no meu
.htaccess
, junto com o módulo sendo carregado, e não estava funcionando.A solução para o meu problema foi editar minha entrada do vhost para inlcude
na
<Directory>
seção do site em questão.fonte
a2enmod rewrite
&RewriteEngine On
no.htaccess
- a existência deAllowOverride all
no arquivo VirtualHost vai impedi-lo de trabalhar - é isso que me pegou fora, alterá-lo paraAllowOverride all
funcionou como um encanto :)AllowOverride
diretiva determina os "Tipos de diretivas permitidas nos.htaccess
arquivos". Além disso, "Quando essa diretiva é definida comoNone
, os.htaccess
arquivos são completamente ignorados. Nesse caso, o servidor nem tentará ler os.htaccess
arquivos no sistema de arquivos". Documentos oficiais: httpd.apache.org/docs/2.2/mod/core.html#allowoverridea2enmod rewrite
e, no arquivo VirtualHosts, altere 'AllowOverride None' para 'AllowOverride All', deve funcionar. O arquivo VirtualHosts se aplica se você estiver executando vários nomes de domínio no mesmo servidor (e endereço IP). Você o configuraria para configurar o domínio.Tente definir:
AllowOverride All
.O segundo problema mais comum é não ter a reescrita de mod ativada:
a2enmod rewrite
e reinicie o apache.fonte
Se não funcionar, tente editar / etc / apache2 / sites-enabled / 000-default
quase no topo você encontrará
Mude
AllowOverride None
paraAllowOverride All
isso funcionou para mim
fonte
/laravel/public/authors was not found on this server
para/index.php was not found on this server
<Directory /var/www/html>
para aplicar a regra somente desta pasta e acima.No Ubuntu:
Corre:
e depois:
mod_rewrite
agora será ativado!fonte
Existem várias maneiras de corrigir esse problema, se você souber a raiz do problema.
Problema 1
Primeiramente, pode ser um problema com o seu apache não ter o módulo mod_rewrite.c instalado ou ativado.
Por esse motivo, você teria que habilitá-lo da seguinte maneira
Abra seu console e digite:
sudo a2enmod rewrite
Reinicie seu servidor apache.
service apache2 restart
Problema 2
Além disso, além disso, se não funcionar, é necessário alterar a regra de substituição do arquivo conf do apache (apache2.conf, http.conf ou arquivo padrão 000).
Localize "Directory / var / www /"
Altere "Substituir nenhum" para "Substituir tudo"
Problema 3
Se você receber um erro informando que o módulo de reescrita não foi encontrado, provavelmente o seu módulo userdir não está ativado. Por esse motivo, você precisa habilitá-lo.
Digite isso no console:
sudo a2enmod userdir
Em seguida, tente ativar o módulo de reescrita se ainda não estiver ativado (como mencionado acima).
Para ler mais sobre isso, você pode visitar este site: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html
fonte
AllowOverride All
pois isso habilitará muitos recursos perigosos (como o uso de scripts perl). Em vez disso useAllowOveride Options
A nova versão do apache mudou de alguma forma. Se a sua versão do apache for 2.4, você deverá acessar
/etc/apache2/
. Haverá um arquivo chamadoapache2.conf
. Você precisa editar esse (você deve ter permissão de root). Alterar o texto do diretório como esteAgora reinicie o apache.
Espero que funcione.
fonte
Abra o terminal e digite
a2enmod rewrite
, Ele habilitará o seumod_rewrite
módulo para Apache.Em seguida, vá para
/etc/apache2/sites-available
e edite o arquivo padrão. (Para isso, você deve ter permissões de gravação neste arquivo e na pasta disponível em sites.)Substitua abaixo pelas linhas existentes 4 a 14
Agora reinicie seu apache por
/etc/init.d/apache2 restart
ouservice apache2 restart
Faça o teste de URL limpo novamente e desta vez será aprovado.
fonte
<edit>
Só notei que você disse mod_rewrite.s em vez de mod_rewrite.so - espero que seja um erro de digitação na sua pergunta e não no arquivo httpd.conf! :)
</edit>
Estou mais acostumado a usar o Apache no Linux, mas tive que fazer isso outro dia.
Primeiro, dê uma olhada no diretório de instalação do Apache. (Presumo que você o tenha instalado em "C: \ Arquivos de Programas" aqui)
Dê uma olhada na pasta: "C: \ Arquivos de programas \ Apache Software Foundation \ Apache2.2 \ modules" e verifique se há um arquivo chamado mod_rewrite.so lá. (Deveria ser, é fornecido como parte da instalação padrão.
Em seguida, abra "C: \ Arquivos de Programas \ Apache Software Foundation \ Apache2.2 \ conf" e abra httpd.conf. Verifique se a linha:
é descomentado:
Além disso, se você deseja ativar o RewriteEngine por padrão, pode adicionar algo como
até o final do seu arquivo httpd.conf.
Caso contrário, especifique
em algum lugar do seu arquivo .htaccess.
fonte
Eu acabei de fazer isso
você precisará reiniciar o serviço apache seguindo o comando
fonte
Thread antigo, só quero colocar que não defina AllowOverride para todos, em vez disso, use o mod específico que você deseja usar,
E essa linha não deve ser comentada
REFERÊNCIAS
fonte
Use o comando abaixo
E o comando apache restart através do comando abaixo
fonte
Obviamente, há mais de uma maneira de fazer isso, mas eu sugiro usar o mais padrão:
fonte
Na primeira vez em que lutei com as regras mod_rewrite que ignoravam meu tráfego, aprendi (frustrantemente) que as colocara incorretas
<VirtualHost>
, o que significava que meu tráfego ignoraria todas elas, independentemente de quão bem escritas elas fossem. Verifique se isso não está acontecendo com você:# Change the log location to suit your system. RewriteLog /var/log/apache-rw.log RewriteLogLevel 2
Esses parâmetros serão ativados se você executar uma reinicialização normal do Apache, para poder reciclá-los e monitorar de perto o comportamento do mod_rewrite. Quando o seu problema estiver resolvido, diminua o RewriteLogLevel e comemore.
Em 100% da minha experiência, descobri que o RewriteLog me ajudou a descobrir o problema com minhas regras de reescrita. Eu não posso recomendar isso o suficiente. Boa sorte na sua solução de problemas!
Além disso, este indicador é seu melhor amigo: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog
fonte
O que funcionou para mim (no ubuntu):
Além disso, como já mencionado, verifique se
AllowOverride all
está definido na seção relevante do/etc/apache2/sites-available/default
fonte