web-dev-qa-db-fra.com

Évitez les dossiers publics de laravel et ouvrez directement la racine dans le serveur Web

Je parcourais tous les exemples possibles sur Internet pour résoudre ce problème. C'est quand même un mal de tête.

Je veux juste éviter le "public" dans www.mylaravelsite.com/public/ et le rendre comme www.mylaravelsite.com pour le répertoire racine.

Maintenant, je ne veux pas éviter le problème de sécurité, alors j’ai appris .htaccess serait le meilleur moyen.

Une solution amis?

& avance merci pour interagir!

36
Sagiruddin Mondal

Supposons que cette structure de dossiers existe sur votre serveur.

.cpanel/
public_html/
public_ftp/
..

Et la structure du dossier laravel est

app/
bootstrap/
public/
vendor/
composer.json
artisan
..

Vous pouvez créer un nom de dossier mylaravelsite sur votre serveur en ligne avec public_html et public_ftp dossier, et copiez-y le tout laravel application sauf le dossier public car vous collerez tout son contenu sur le public_html, vous avez donc maintenant:

.cpanel/
public_html/
public_html/packages
public_html/vendor
public_html/index.php
public_html/.htaccess
...
public_ftp/
mylaravelsite/
mylaravelsite/app
mylaravelsite/bootstrap
...

Sur ton public_html/index.php changez la ligne suivante:

require __DIR__.'/../bootstrap/autoload.php';

$app = require_once __DIR__.'/../bootstrap/start.php';

à

require __DIR__.'/../mylaravelsite/bootstrap/autoload.php';

$app = require_once __DIR__.'/../mylaravelsite/bootstrap/start.php';

et aussi n'oubliez pas de changer /mylaravelsite/bootstrap/paths.php chemin public, vous pouvez l’utiliser.

'public' => __DIR__.'/../public',

à

'public' => __DIR__.'/../../public_html',

Votre site devrait être en cours d'exécution.

53
lukaserat

Créez .htaccess dans le dossier racine et écrivez ces lignes

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

Pour le serveur de production, il est recommandé de diriger votre domaine directement vers le dossier public.

20
Anik

Il semble que les informations qui vous manquent sont:

Documentroot

Ceci est également appelé la "racine Web". Apache appelle spécifiquement le DocumentRoot - Cliquez sur ce lien pour obtenir une explication officielle.

Fondamentalement, il définit le répertoire dans lequel le serveur extrait les fichiers. Dans Laravel, la racine du document devrait être le dossier public.

Définir DocumentRoot sur public signifie que passer à http://mylaravelsite.com dans le navigateur ne "pointera" pas sur le dossier public comme vous le souhaitez.

Dans le fichier .htaccess (en fait, plus probablement dans le configuration de l'hôte virtuel ), vous pouvez définir le DocumentRoot de votre site:

DocumentRoot /path/to/laravel-app/public

La manière dont vous configurez cela dépend de votre hébergement. Chaque hébergement dispose de différentes manières pour configurer un site Web et nous ne pouvons donc pas vous répondre de manière spécifique. Vous devez consulter le support technique de votre hébergeur. Le point clé est que le répertoire public devrait être la racine Web, tandis que tout le reste devrait être "derrière la racine Web".

Avertissement juste, certains fournisseurs d'hébergement ne vous donnent pas assez d'accès pour y parvenir.

14
fideloper

pointez votre répertoire web sur public/. Si vous utilisez Apache, cela fonctionnera:

<VirtualHost *:80>
  DocumentRoot /var/www.mylaravelsite.com/public/
  ServerName www.mylaravelsite.com
</VirtualHost>
5
lukaserat

Voici la solution, mais il ne faut pas le faire dans des projets réels, c’est juste pour que le testeur teste Laravel et je l’ai testé avec laravel 5.0 et le is, coupe les fichiers index.php et .htaccess du dossier public et les colle dans le répertoire racine et modifie ces deux lignes comme suit:

require __DIR__.'/bootstrap/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php';

Il est vivement recommandé de ne pas utiliser la méthode ci-dessus sans l'environnement de test et d'utiliser plutôt l'hôte virtuel.

3
Muhammad Sadiq

Ajoutez simplement le fichier .htaccess sur Laravel root si ce n’est pas présent et ajoutez les lignes suivantes, c’est tout,

<IfModule mod_rewrite.c>  
   RewriteEngine On 
   RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
2
Atul Shah

Il vous suffit de modifier le fichier .env dans vos fichiers de projet laravel. Si votre laravel à l'intérieur de

Racine/domaine/public_html/laravel /

Aller au fichier .env et éditer

vous devez modifier le chemin de l'URL de l'application qui devrait être

APP_URL = http://www.domainname.com/laravel/public/

Thats it votre projet se déroulera maintenant. si vos fichiers laravel sont dans public_html, l'URL de votre application doit être comme ceci

APP_URL = http://www.domainname.com

Merci

1
Chetan Bhootra

Pour lumen

Imaginons que vous ayez un chemin de dossier du type:/var/www/project/microservice (Lumen src)

/ var/www => racine du document pour localhost /

Ciblez votre choix: localhost/project/microservice [/ foo ...] => localhost/project/microservice/public/foo ...

Je le fais par .htaccess (placé dans/dossier du projet) comme ci-dessous:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^.*/public/.*
RewriteCond %{REQUEST_URI} ^(/[^/]+/[^/]+/).*
RewriteRule ^[^/]+(.*)$ %1public$1 [L,R=301,P]
0
xuanhvh