Habilite a reescrita de URL (mod_rewrite) usando arquivos .htaccess em ~ / Sites no Lion

13

Não consigo fazer o mod_rewrite trabalhar no Lion. Estou desenvolvendo vários sites localmente, em ~ / Sites, usando arquivos .htaccess. Estou no 10.7.3 e não toquei em nenhum arquivo de configuração, exceto para ativar o PHP no httpd.conf (que funciona).

Eu sei que há pelo menos duas perguntas sobre isso aqui, mas as soluções detalhadas lá não funcionam. Nem as outras soluções que encontrei na web. Eu devo estar fazendo algo estúpido ou ignorando algo, ou então provavelmente estou ficando louco, mas não está funcionando.

Eu tentei todas as coisas usuais:

  1. Em /private/etc/apache2/users/<myusername>.conf, a mudança AllowOverride Nonepara AllowOverride Alle reiniciar o servidor web

  2. Além disso, em /private/etc/apache2/httpd.conf, altere todas / todas as ocorrências de AllowOverride Nonepara AllowOverride All- eu tentei em todos os vários lugares em que essas diretivas são encontradas

  3. Tente basicamente todas as combinações possíveis de valores para a Optionslinha acima / abaixo da AllowOverridelinha, incluindo os valores:Indexes MultiViews FollowSymLinks All

Sempre reinicie o servidor da Web após essa alteração, é claro. Nada disso funciona. Todos os meus URLs limpos simplesmente não funcionam; Eu recebo um 404 - não encontrado. O log de erros do Apache apenas fornece os erros "O arquivo não existe:". Portanto, parece que o módulo mod_rewrite nem está funcionando.

Eu me certifiquei de que o mod_rewrite seja carregado no httpd.conf, o que é; por padrão, é uma instalação Lion.

O mais louco é que tudo estava funcionando perfeitamente - até que eu migrei para uma nova máquina executando o Lion. Ou seja, estou descartando um erro nos meus arquivos .htaccess porque sei que funcionava antes. Além disso, se houvesse um erro no .htaccess, eu receberia algum tipo de mensagem de erro do módulo mod_rewrite no error_log do Apache, pelo menos me dizendo que o próprio módulo está sendo chamado. Mas isto não esta acontecendo.

Estou negligenciando alguma coisa? Preciso alterar as configurações em outro lugar? Eu tenho que mudar a configuração do PHP? Por que as instruções (como Como ativar o mod_rewrite no MacOSX Lion e fazer com que o mod_rewrite funcione no Mac OS X ) estão funcionando para outras pessoas, mas não para mim? :)

Já perdi horas com isso. Qualquer ajuda será muito apreciada.

Niels Heidenreich
fonte
BTW, eu não quero usar o MAMP. Eu usei o MAMP antes e ele não funcionou bem com o MySQL que já está no meu sistema. Esta seria a substituição de uma dor de cabeça com outra dor de cabeça, então não, obrigado :)
Niels Heidenreich
BTW, eu estou no OS X Lion padrão, NÃO no Lion Server.
Niels Heidenreich
Isso não responde à pergunta, mas uma alternativa para lutar com o ambiente local do seu Mac para fazer web dev é usar algo como o Vagrant , que permite configurar e gerenciar facilmente as configurações da máquina virtual.
Dan J

Respostas:

12

Você deve ter certeza de que no seu /etc/apache2/users/username.conf você tem o seguinte:

<Directory "/Users/username/Sites/">
    Options Indexes MultiViews FollowSymlinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

Os FollowSymlinks e AllowOverride são essenciais aqui. Enquanto você está sugerindo os dois na sua pergunta, talvez você não os tenha configurado corretamente em conjunto.

Verifique se o httpd.conf /private/etc/apache2/extra/httpd-userdir.conf também está incluído. É por padrão.

Após qualquer modificação, reinicie o servidor da Web para que as alterações entrem em vigor.

Se você ainda estiver tendo problemas, talvez haja um problema com suas regras de reescrita reais. Você os estava usando em um contexto .htaccess antes também? Observe que em um .htaccess, a regex de regra de regravação é comparada com um URI de solicitação sem a barra inicial e sempre relativa ao diretório em que o .htaccess reside , enquanto que em um httpd.conf global o URI deve corresponder a uma barra inicial e é em relação à raiz da web. Como, supostamente, você possui seu .htaccess em um subdiretório ~ / Sites, suas regras de reescrita podem se comportar diferentes de quando o .htaccess reside na raiz da web de um host (virtual).

Para depurar o mod_rewrite, você pode habilitar o registro de reescrita. Você deve habilitar isso no /etc/apache2/httpd.conf:

RewriteLogLevel 3
RewriteLog /path/to/rewrite.log
Gerry
fonte
Obrigado Gerry. Sim, eu tentei isso; apenas tentei de novo; infelizmente não funciona. Eu não mudei o .htaccess, ele está em ~ / Sites /…, como era antes. Isso é muito frustrante :(
Niels Heidenreich 04/04
Tente ativar o registro de reescrita como alterei acima.
Gerry
OK, não é um problema com mod_rewrite, ao que parece; é o arquivo .htaccess que é completamente ignorado. Posso colocar qualquer lixo nele e não recebo nenhuma mensagem de erro. Portanto, o Apache não está carregando. Eu verifiquei as permissões, elas estão ok (o arquivo é legível pelo mundo). Tentei torná-lo executável, sem alterações.
Niels Heidenreich 04/04
Se eu colocar um .htaccess em / Library / WebServer / Documents e abrir " localhost " para testá-lo, isso funcionará conforme o esperado. Simplesmente não funciona em "~ / Sites".
Niels Heidenreich 04/04
Eu fiz algo louco e criei uma segunda conta de usuário com o nome de login "testitester". Defino AllowOverride como All no .conf do usuário. Coloquei um .htaccess contendo lixo na pasta Sites do usuário. Se eu for para localhost / ~ testitester, recebo um erro 500, conforme o esperado.
Niels Heidenreich 04/04
1

Adicionar opções + FollowSymLinks funcionou bem para mim

Options +FollowSymLinks

RewriteEngine on
RewriteBase /
RewriteRule
maseth
fonte
com o que está fazendo Options +FollowSymLinks? Eu só adicionar essa linha funciona para mim
Kannika
1

Eu estava com um problema semelhante em que meu arquivo .htaccess estava sendo completamente ignorado enquanto estava em uma subpasta dentro do diretório ~ / Sites em um VirtualHost configurado corretamente.

Depois de passar a última hora brincando com diferentes arquivos de configuração e definindo AllowOverride All em vários lugares, finalmente descobri que o arquivo .htaccess, embora parecesse um arquivo .htaccess no Finder, era na verdade um arquivo .htaccess.txt com o extensão oculta.

Para verificar e alterar seu arquivo .htaccess, clique com o botão direito do mouse e escolha Obter informações e remova qualquer extensão principal do final, como a que eu tinha:

E agora funciona!

Jarada
fonte
1

Abaixo as entradas .htaccess corrigidas para mim

Options Indexes FollowSymLinks


<ifModule mod_rewrite.c>

RewriteEngine On
#RewriteBase /~charles/Sites/Timesheet/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [NC,QSA,L]


</ifModule>
Charles J
fonte
0

Colocando .htaccess em / Library / WebServer / Documents e abra "localhost /"; para testá-lo, funciona como esperado. Simplesmente não funciona em "~ / Sites". Obrigado Niels Heidenreich por isso!

Varun Bhatia
fonte
-1

Quando você digita: / Users / username / app_name

O / refere-se à raiz do servidor da web:

"localhost /"

Se você usar / ~ nome de usuário / app_name em sua reescrita, deve funcionar.

Bisteces
fonte
1
Caminhos começando com /são sempre caminhos absolutos para Apache, ver definição de raiz webserver em http.conf ( <Directory "/Library/WebServer/Documents">)
nohillside