Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

J'ai bouger les fichier qui était dans le dossier public pour avoir une url comme ceci:

exemple.com/

et non
exemple.com/public/

Ce que je veux

En faissant cette modification les utilisateur on accès à des fichier et des dossier comme app/, boostrap/, composer.json etc

J'ai essayer une condition comme ceci pour bloquer l'accèes :

    RewriteEngine On

    RewriteCond ^(app|bootstrap|artisan|config|database)$ - [F,L]

Ce que j'obtiens

Quand je fait le test avec un dossier ou un fichier qui est posé d'être bloquer. J'ai toujours le dossier ou le fichier qui sont posés d'être bloqué est toujours accessible. Pourquoi mon fichier .htacess qui est à la racine ne prend pas le pas et bloque l'accès?

Merci de votre aide.

17 réponses


Bonjour,

Si tu es sur Laravel , et, que tu souhaite eviter une url style exemple.com/public, tu n'aurais pas du déplacer tes fichiers mais plutot faire ce qui suit:

Pour arriver sur public/index.php tu dois crées à la racine de ton site un fichier .htaccess qui devrait contenir ceci :

RewriteEngine On
RewriteRule (.*) public [L]

Ensuite dans ton dossier public tu crées un autre fichier .htaccess qui contient ceci:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php [L]

Attention si tu créer les fichiers .htaccess depuis windows n'oublies pas de l'encradrer de guillemet en le nommant ex: ".hatccess".

Cela fonctionne chez moi avec wamp

Bonne continuation

Salut,

Normalement, le fichier .htaccess est prérempli tu n'as pas à t'en occuper. Mais je pense, au vu de ce que tu dis, que tu n'as pas compris ce qu'est une redirection. On ne bouge pas un dossier pour changer l'URL. Tu devrais remettre le .htaccess d'origine.
Ceci étant dit, si tu souhaites changer le dossier public, il te faut éditer le fichier server.php se trouvant à la racine du projet (https://github.com/laravel/laravel/blob/master/server.php).
Si j'avais à faire ça perso je prévoirais une varable dans mon fichier .env (ex. public_path=/mon_nouveau_dossier) pour ensuite m'en servir dans le fichier server.php (en te servant de la méthode helper env('public_path') https://laravel.com/docs/5.3/helpers#method-env).

lakamark
Auteur

Je renome le fichier server.php en index php? J'ai fait ça et ça fonctionne.

J'ai daite une variable dans le fichier .env :
APP_PUBLIC_PATH=/public

Tous ce que je veux c'est quand on tape exemple.com/ on arrive sur la page d'accueil du site. Dans Laravel c'est le dossier public/ la racine du site web.

Autre problème est que j'ai toujours accès aux dossiers (app,boostrap,databasse etc) que je veux bloquer l'accès.

Mais personne n'aura accès au dossiers qui sont à la racine, ils sont bloqués par ton .htaccess. Maintenant, il faut configurer un virtualhost via Apache ou Nginx. Tu peux trouver des ressources sur le site si tu veux : https://www.grafikart.fr/formations/serveur-linux/apache
Mais grosso-modo il faut faire pointer un dns que tu choisis vers le bon dossier.
PS : Pour le moment, tout ce que je dis s'applique en dev. Pour la prod, tu dois acheter ton nom de domaine, puis le faire pointer vers ton serveur.

Bonjour,
Normalement, ton nom de domaine doit pointer dans le dossier "public" de ton installation et non directement dans le dossier... sinon, tu as de grosses failles de sécurité.
Et le fichier server.php c'est quand tu utilises l'artisan en mon serveur donc tu ne dois pas toucher à ce fichier.
Ton problème est au niveau de ton nom de domaine et non de Laravel.
Bonne chance!

lakamark
Auteur

Je fait ça, car je n'est pas accès au fichier default.conf ou la configuaration d'apache sur mon serveur de productio, car, je suis sur un serveur mutualisé. C'est pour ça que je suis limité seulement à des fichiers .htaccess pour modifier la configuration d'apache.

Tu n'as pas de nom de domaine ?? Tu es chez quel hébergeur ?

Curieux effectivement... j'utilise Laravel en mutu chez OVH sans aucun problème.
Après si tu n'as pas accès à la gestion du nom de domaine, c'est une autre histoire et même en faisant des bidouilles, ça va être une passoire niveau sécurité.

@MaMouT Comment as-tu installé ton Laravel sur un mutu ?

J'ai déjà ma version qui tourne sur wamp et je l'upload sur mon hebergement.
Je fais pointer mon nom de domaine sur le dossier public.
Un coup de php artisan (migrate, etc...) et ça roule.

Ouaip mais justement j'ai l'offre "perso" et je n'ai pas accès en SSH au serveur... sur quelle offre es-tu ?

J'ai une offre pro qui ne se fait plus il me semble mais sans ssh, ce n'est pas possible effectivement.

Ouais donc je vais devoir migrer sur une offre un peu plus chère si je veux pouvoir déployer la nouvelle version du site qui est sous Laravel...

Tu peux aussi changer d'hebergeur ;-)
Perso, j'utilise aussi http://www.o2switch.fr/, c'est 72€ ttc/an et c'est vraiment un bon hebergeur (avec un très bon SAV contrairement à OVH).

lakamark
Auteur

Pour tous répondre à vos question :

Je suis sur l'hébergeur Hostpapa :

https://www.hostpapa.ca/fr/

C'est un hébergeur canadien.

Pour passer à une vps ça me coute 50$ CAD par mois! :

https://www.hostpapa.ca/forfait-hebergement-web/hebergement-vps/

@lakamark ce qui m'étonne, c'est que tous les hebergeurs mutualisés que j'ai testé permettent de changer de dossier de pointage d'un nom de domaine.
Ca marche chez : OVH, gandi, 1&1, o2switch, pulseheberg... et j'en oublie surement.
Visiblement hostpapa utilise CPanel... et il est possible de changer de pointage du domaine avec ce système.

lakamark
Auteur

@MaMout : C'est que je suis sur un serveur qui est partager par d'autre clients. C'est moins chère, mais il y a un inconvéniant c'est la configuration est très limité. Juste par curiosité c'est où sur CPanbel où tu peut changer le pintage de domaine?