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!
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.
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.
Il semble que les informations qui vous manquent sont:
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.
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>
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.
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>
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
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]