Por que meu arquivo .htaccess está redirecionando para o caminho completo do servidor em vez do caminho relativo?
-
23-09-2019 - |
Pergunta
Eu nunca tive um problema com o CakePHP antes, mas algo é estranho nesse servidor e está causando os redirecionamentos nos arquivos .htaccess se comportar de maneira estranha.
O CakePHP usa mod_rewrite nos arquivos .htaccess para redirecionar solicitações para sua própria pasta webroot. O problema é que os redirecionamentos estão listando o caminho errado e causando um erro 404. Meu aplicativo CakePhp, que é armazenado no diretório de listagens, possui um arquivo .htaccess da seguinte forma:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ app/webroot/ [R=301,L]
RewriteRule (.*) app/webroot/$1 [R=301,L]
</IfModule>
(*Observe que o r = 301 causa um redirecionamento externo para que possamos ver o que está acontecendo do nosso lado. Ele realmente deve omitir essa bandeira e fazer o redirecionamento internamente, transparente para os usuários finais)
Isso deve redirecionar qualquer solicitação de http://hostname.com/~username/listings/
para http://hostname.com/~username/listings/app/webroot/
No entanto, em vez de simplesmente adicionar “app/webroot/
”Até o final, como deve, está adicionando o caminho completo do servidor ( /home/username/public_html/listings/app/webroot/
) resultando no URL final http://hostname.com/home/username/public_html/listings/app/webroot/
que é obviamente incorreto e desencadeia um erro 404.
A hospedagem está em uma conta de hospedagem compartilhada, para que limite o que posso fazer com as configurações. Eu nunca vi isso acontecer antes, e acho que é algo errado do lado da hospedagem, mas se alguém tiver algumas sugestões úteis, também posso colocá -las na empresa de hospedagem.
Solução
A solução para sua pergunta pode ser encontrada no fundo deste página No livro Cakephp:
Para muitos serviços de hospedagem (Godaddy, 1 e1), seu servidor da Web está realmente sendo servido de um diretório de usuários que já usa mod_rewrite. Se você estiver instalando CakePhp em um diretório de usuário (http://example.com/~username/cakephp/), ou qualquer outra estrutura de URL que já utilize mod_rewrite, você precisará adicionar instruções de rewritebase aos arquivos .htaccess boloshp usa (/.htaccess, /pp/.htaccess, /pp/webroot/.htaccess).
Eu implantei o CakePHP na pasta public_html do meu perfil também. Eu tive que alterar 3 os mesmos arquivos .htaccess mencionados acima. Basta adicionar RewriteBase /~username/
para os arquivos .htaccess logo depois RewriteEngine on
!
Outras dicas
Tente remover .htaccess do arquivo principal ... funcionou para mim
Era bastante simples (usando o host compartilhado UOLHOST):
Edite ambos os arquivos .htaccess:
/webroot/.htaccess
/.htaccess
Adicione a seguinte linha: RewriteBase /
Aqui está o arquivo inteiro /webroot/.htaccess:
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]