Por que meu arquivo .htaccess está redirecionando para o caminho completo do servidor em vez do caminho relativo?

StackOverflow https://stackoverflow.com/questions/2542820

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.

Foi útil?

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]

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top