Laravel 6

Laravel et sous-domaine

Avatar de Vable
Vable

Bonjour à tous ! Je pense que le problème a déjà été évoqué mais je n'arrive pas à trouver de solution qui se rapproche de ma configuration... =( Mon application Laravel est un outil qui permet de gérer des formulaires.

J'aimerais l'installer en ligne sur mon serveur via un sous-domaine car il y a déjà un Prestashop qui tourne sur le domaine principal (donc, il y a dans le dossier public_html tout les fichiers et dossiers permettant de faire tourner Prestashop).

Via mon cPanel, j'ai donc créé un sous-domaine où le root est un dossier "form" dans le public_html où je compte mettre l'ensemble des fichiers de Laravel.

C'est ce que j'ai testé en mettant tout dans le dossier form (ainsi que le dossier public). Evidement, ça ne marche pas et j'ai une page blanche (erreur 500 je suppose) en passant via l'url https://form.nomdusite.com. J'ai bien modifié le fichier index.php dans le dossier form pour avoir le bon chemin pour le autoload.php et le app.php

Par contre, si je fais https://form.nomdusite.com/index.php cela fonctionne et l'url reste la même.

Je suppose que le souci vient donc du htaccess mais j'avoue que c'est un peu chinois pour moi...

et j'ai ajouté ceci dans le fichier htaccess de mon dossier form :

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_URI} !^/public/ 

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*)$ /public/$1 
#RewriteRule ^ index.php [L]
RewriteRule ^(/)?$ public/index.php [L] 
</IfModule>

Dans mon dossier public, j'ai ceci dans le .htaccess :

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Pour info, j'ai PHP 7.3 avec les extensions nécessaires. Merci d'avance pour toute l'aide et les explications que vous pouvez m'apporter car je bloque réellement sur ce point et ça m'ennuie de ne pas comprendre =)

Avatar de bestmomo
bestmomo

Salut,

Tu peux pas placer ton application ailleurs que dans public_html ?

Avatar de CinquièmeDimension
CinquièmeDimension

Salut,

Le root est sensé être le dossier public_html/form/public. Faire pointer le dossier public_html/form est pas top. C'est une faille de sécurité et ça t'oblige à modifier des fichiers. Je faisais comme ça au début et je me suis rendu compte que c'est pas génial (De mémoire il fallait recommer server.php en index.php et copier le .htaccess de /public dans le root).

Par contre, rassure-moi, ton presta n'est pas à la racine de public_html ? Si oui, on peu donc accéder à tes fichiers laravel en faisant https://www.nomdusite.com/form et c'est vraiment pas bon, ça.

La bonne config est :

Mais ça, toutes les offres d'hébergement ne le permettent pas...

Autre question, dans ton herbergement, as-tu accès à une console SSH ?

Avatar de Vable
Vable

Bonjour, Désolé du temps de réponse. J'ai désormais accès à SSH et aux dossiers au dessus du public_html. Par contre, oui, généralement, que ce soit du WordPress, du Laravel ou PrestaShop j'ai toujours mis les dossiers dans le public_html, je ne savais pas que ça avait une incidence. Quelle serait alors la bonne méthode lorsque l'on a un Laravel avec un autre CMS sur le même hébergemenent ? Laisser le CMS dans le public HTML et mettre le Laravel dans un dossier au dessus ? Merci encore,

Avatar de CinquièmeDimension
CinquièmeDimension

Salut,

L'important est de ne pas les mélanger. Si tu te dis que public_html est ton dossier CMS, alors il te faut un autre dossier au même niveau que public_html.

Selon les hébergeurs, ce n'est pas toujours possible de créer un dossier à ce niveau. Si tu ne peux pas, tu peux faire un dossier public_html/cms et un dossier public_html/laravel avec les différents sous-domaines qui pointent dans chaque dossier. Mais surtout pas une installation dans public_html et une autre dans un sous dossier de public_html.

Dans ton cas, ce serait con de pouvoir faire https://www.nomdusite.com/form/.env et récupérer tes accès BDD par exemple.

Avatar de Vable
Vable

Je pense que je comprends !

Du coup, dans ma situation le mieux est de laisser le Prestashop tel quel à la racine du public_html.

  • Ensuite, à l'intérieur, je créé un dossier "form" qui contient les fichiers du dossier public de mon application Laravel.
  • Je créé, par après, un sous-domaine "form" qui pointe vers ce dossier.
  • Au même niveau que le dossier public_html je place les dossiers de mon application Laravel et je change les chemins du dossier public vers public_html/form.

Est-ce que cela semble mieux ?

Actuellement, si je fais https://nomdusite.com/form/.env on me retourne une 404 Prestashop. Je suppose que c'est le routing de Pretashop qui prends le dessus.

Avatar de CinquièmeDimension
CinquièmeDimension

Non, il faut soit:

  • Ton Presta dans /public_html
  • Ton Laravel dans /form (et AUCUN fichier laravel dans /public_html) et tu pointe ton sous domaine laravel vers /form/public

soit (si tu ne peux pas créer de dossier à la racine de ton hebergement)

  • Ton presta dans /public_html/presta et tu pointe ton sous domaine de presta vers /public_html/presta
  • Ton Laravel dans /public_html/form (et AUCUN fichier laravel dans /public_html/presta) et tu pointe ton sous domaine laravel vers /public_html/form/public

Dans tous les cas, aucun de tes fichiers Laravel n'a rien à faire dans ton dossier presta, et il faut pointer ton sous domaine laravel vers le dossier public de ton dossier laravel

Avatar de Vable
Vable

Très bien, c'est parfait ainsi ! Je vais donc faire cela et déplacer l'ensemble de mon application Laravel en dehors du dossier public_html. Merci beaucoup pour les réponses détaillées :)

Vous ne pouvez pas répondre à ce sujet.