Solucionado (ver solução)
Solucionado
(ver solução)
12
respostas

Site funciona no servidor PHP local, mas não na hospedagem (Meu primeiro site).

Olá! Gostaria de uma orientação para o meu problema relacionado a subir meu primeiro site para uma hospedagem.

Desenvolvi um sistema em php aplicando e me baseando nos conhecimentos do padrão MVC e utilizando o Composer, PDO e Doctrine:ORM.

O sistema funciona normalmente no servidor local do php sem nenhum problema. No servidor local, acessando "localhost:porta/", o arquivo index redireciona para "localhost:porta/login" mas ao subir o site para a hospedagem, me é retornado o código 403 de acesso negado.

Conversando com o suporte da hospedagem, me falaram por alto que o problema era no meu arquivo index.php que "não estava adaptado para o composer, e por isso o servidor retornava o acesso negado".

Alguém poderia me ajudar com essa questão e analisar meu código?

Vou deixar o link do repositório. O arquivo index.php está na pasta public: https://github.com/GiulioSousa/melhore_client/

Ps: A hospedagem é da Hostgator.

Desde já agradeço!

12 respostas

Olá, Giulivan. Qual o servidor web utilizado na hospedagem? Você vai precisar configurá-lo para que todas as requisições cheguem no seu index.php. O servidor embutido do PHP faz isso automaticamente, mas os demais servidores web não.

É um servidor Apache, aparentemente.

Então você vai precisar configurar o Apache para enviar todas as requisições para seu index.php. Geralmente, em hospedagens compartilhadas, isso é feito através de um arquivo de configuração chamado .htaccess.

Tentei diversas configurações do arquivo, mas sem êxito.

Falando com o suporte, me reportaram que o problema estaria relacionado ao composer. Perguntei se o .htaccess estava correto e me falaram que sim.

Segue o código do arquivo .htaccess:

# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php81” package as the default “PHP” programming language.
<IfModule mime_module>
  AddHandler application/x-httpd-ea-php81___lsphp .php .php8 .phtml
</IfModule>

#Order Deny, Allow
#Allow FROM all

#<IfModule mod_rewrite.c>
#    RewriteEngine On
#    RewriteBase /

    # Please DO NOT edit below.
#    RewriteRule ^index\.php$ - [L]
#    RewriteCond %{REQUEST_FILENAME} !-f
#    RewriteCond %{REQUEST_FILENAME} !-d

    # For root installations.
#    RewriteRule . index.php [L]

    # If you host files in a subfolder, comment above line.
    # Uncomment below line and change "host-path" with your subfolder name.
    #RewriteRule . host-path/index.php [L]

    # NOTE: You have to rename this file as ".htaccess" to run your site.
    # Please note that "." files will be hidden. May need restarting apache also.
    # Visit: https://www.rndvn.com/framework and get more support.
#</IfModule>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# php -- END cPanel-generated handler, do not edit

Em qual curso eu posso aprender sobre a parte de deploy em ambiente de produção e as configurações dos servidores de hospedagem?

Só falta esse último passo da prática pra oficializar meu primeiro site no ar.

Giulivan, uso o hostgator tambem... por enquanto somente para treinamento.......tive alguns probleminhas quando fui subir um projeto onde usei o composer mas mexi em algumas coisas e acabou funcionando...vou dar uma olhada por cima no seu codigo pra ver se descubro/relembro o que pode ser....

só pra ir adiantando.... caso eu nao consiga achar olhando lá... no cpanel ....vai em gerenciador de arquivos e entra na pasta do seu projeto..... pra ver se encontra algum arquivo que foi criado automaticamente la na pasta inicial mesmo do projeto... algum de erros (esqueci o nome ...mas e facil de achar)...pra ver que mensagem está aparecendo... ai voce coloca aqui os erros ...

solução!

Giulivan ,

Os meus projetos tem padroes diferentes do seu, inclusive tenho um mais parecido com o seu que ainda preciso mexer pra melhorar a url, mas vi que o seu index.php está dentro da pasta public, pelo jeito que voce colocou...acredito que ele procure o index.php na pasta raiz

vi uma sugestão neste link aqui https://pt.stackoverflow.com/questions/428266/redirecionar-usu%C3%A1rio-para-pasta-public-e-restringir-acesso-aos-arquivos-da-raiz#:~:text=Para%20resolver%2C%20precisa%20ser%20criado,quiser%20que%20fique%20o%20index).&text=Sendo%20as%20duas%20primeiras%20linhas,de%20acordo%20com%20sua%20aplica%C3%A7%C3%A3o.

Solução que a pessoa utilizou no link acima:

*"Consegui achar uma solução. Para resolver, precisa ser criado dois arquivos, um .htaccess na raiz do projeto, e um .htaccess dentro da pasta public (ou a que você quiser que fique o index).

Para fazer o redirecionamento para a pasta public, o .htaccess na raiz do projeto deve conter o seguinte conteúdo:"*

RewriteEngine On RewriteCond %{REQUEST_URI} !public/ RewriteRule (.*) public/$1 [L] Já o .htaccess que está dentro da pasta public deve conter o seguinte conteúdo:

RewriteEngine On RewriteBase /nome_da_pasta_do_seu_projeto Options All -Indexes RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?route=/$1 [L,QSA]

Sendo as duas primeiras linhas obrigatórias e o resto você pode customizar de acordo com sua aplicação.

Em qual curso eu posso aprender sobre a parte de deploy em ambiente de produção e as configurações dos servidores de hospedagem?

Não temos curso de Apache aqui na Alura e cada plataforma de hospedagem compartilhada possui suas especificidades. Mas temos cursos de Nginx (que é um servidor web mais moderno) e cursos de cloud que geralmente é onde as aplicações PHP rodam (AWS, por exemplo).

Quanto a seu problema, as hospedagens compartilhadas costumam ter um nome específico de pasta que possui o "root" do apache. Às vezes é web, às vezes é public_html. Talvez você esteja enfrentando um problema por isso.

Como você subiu sua aplicação para o servidor? Foi via ssh? Conferiu como era a estrutura do servidor antes de fazer upload dos seus arquivos?

Cristina, a solução que sugeriu do StackOverFlow resolveu a questão do acesso e a página de login é carregada.

Minha dúvida que permanece agora é se com a configuração dos dois arquivos .htaccess, se isso influencia no redirecionamento das rotas.

Agora ao tentar fazer o login, a requisição de post é feita para a rota /validar-login, o endereço muda para https://endereco.com/validar-login, mas é carregada a view de login e a requisição post retorna o status 200.

Creio que ainda precise configurar esse redirecionamento no .htaccess.

O .htaccess na pasta raiz ficou assim:

# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php81” package as the default “PHP” programming language.
<IfModule mime_module>
  AddHandler application/x-httpd-ea-php81___lsphp .php .php8 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !public/
RewriteRule (.*) public/$1 [L]
</IfModule>

E o arquivo na pasta public assim:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
Options All -Indexes
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=/$1 [L,QSA]
</IfModule>

Ps: Incluí um código adicional para forçar o https na conexão.

Vinícius, sobre a aplicação, fiz apenas o upload de um arquivo compactado e extraí na pasta de acesso com o nome do domínio. Existe a pasta public_html, mas fica na pasta raiz utilizada pelo domínio principal. O que estou utilizando é um outro domínio.

Qual seria a diferença entre fazer o upload dos arquivos da forma que fiz e via SSH?

Sobre os cursos, tenho interesse em aprender sobre o Nginx, Cloud, e outros servidores, mas depois que eu compreender os fundamentos de um servidor e aprender um pouco mais do Apache, que no momento é o único compatível com a hospedagem utilizada.

Giulivan,

Entendo só um pouco o que faz o htaccess... mas nunca usei ele pra este tipo de rota deste jeito.... vou na tentativa e erro tentando mexer, mas tenta fazer do jeito que voce tinha feito anteriormente, usa os 2 htaccess como o sugerido naquele forum, só que tenta mudar esta linha RewriteRule ^(.)$ index.php [L](ao inves de RewriteRule ^(.)$ index.php?route=/$1 [L,QSA]) ...so pra testar .... acho que ai ele deve enviar pro index.php e a partir de lá ele vai acessar as rotas de acordo com o que você colocou no index... (nao tenho certeza mas tenta ai...) se nao funcionar voce volta pro que tava antes e vai testando umas pequenas mudanças ai no .htaccess

tem umas explicacoes aqui do que significa cada uma destas letras e expressoes (L, QSA ...etc)

https://httpd.apache.org/docs/current/rewrite/flags.html#flag_qsa

Oi, Cristina.

Fiz uma pausa para pesquisar e entender melhor as configurações do .htaccess.

De qualquer forma, seu segundo post solucionou meu primeiro problema, que era conseguir acessar a página sem dar o acesso negado.

Vou marcar ela como solução e no futuro, caso ainda não consiga solucionar, abro um novo tópico mais direcionado pra o problema atual.

Muito obrigado!

Oi Giulivan, por nada...se pudesse teria te ajudado mais....estou meio apertada de tempo este mês, mas logo que tiver uma folguinha vou tentar entender melhor sobre estas configurações do .htaccess ... também tenho que melhorar a url de um projeto que subi la pro hostgator... Espero que aprenda bastante e consiga resolver este segundo problema... Bons estudos!!! : )

só mais uma coisa que vi num arquivo meu e queria sugerir você também testar... depois você tenta assim também.... do jeito que voce tinha feito (com este pedaço ?route=/$1 ) (mas tenta sem usar o L e o QSA ) ... depois tenta so com o [L] RewriteRule ^(.*)$ index.php?route=/$1