Je sais que c'est une question très populaire, mais je n'ai pas été en mesure de trouver une solution de travail pour Laravel 5. J'essaie de migrer de Codeigniter depuis longtemps, mais ce processus d'installation compliqué me décourage toujours.
Je ne veux pas exécuter une machine virtuelle, cela semble juste gênant lors du basculement entre les projets.
Je ne veux pas définir ma racine de document dans le dossier public, cela est également gênant lors du basculement entre les projets.
J'ai essayé la méthode .htaccess mod_rewrite
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Cela me donne juste une Laravel NotFoundHttpException dans la ligne 7610 compiled.php.
Lorsque j'ai essayé L4 il y a quelque temps, j'ai utilisé la méthode pour déplacer le contenu du dossier public vers la racine. La structure de L5 est assez différente et en suivant les mêmes étapes a complètement cassé Laravel (le serveur ne retournerait qu'une page vierge).
Existe-t-il une méthode décente pour supprimer le «public» dans un environnement de développement qui:
- Fonctionne avec L5
- Me permet de basculer entre les projets avec facilité (je travaille généralement sur 2 ou 3 à la fois).
Merci
** J'utilise MAMP et PHP 5.6.2
Réponses:
Pour Laravel 5:
server.php
dans votre dossier racine Laravel enindex.php
.htaccess
fichier du/public
répertoire dans votre dossier racine Laravel.C'est tout!
la source
.env
fichier si vous le faites, sauf si vous êtes d'accord avec les personnes qui consultent le mot de passe de votre base de données en texte clair;)<Files "log.txt">Order Allow,DenyDeny from all</Files>
résout le problème que vous avez résolu. Est-il sûr maintenant ou plus de risques?log.txt
. Assurez-vous simplement de bloquer les données sensibles du public. Si vous utilisez Laravel et lisez attentivement la documentation , votre racine Web ressembleraproject/public
. Jetez un oeil à cette discussion stackoverflow qa . Configurez votre serveur Web et essayezhttps://example.com/.env
au cas où. Si vous voyez vos mots de passe, considérez tout ce qui est compromis et changez tous les mots de passe.J'ai résolu le problème en utilisant 2 réponses:
Changer .htaccess un peu comme suit pour la statique:
S'il y a d'autres fichiers statiques nécessaires, ajoutez simplement l'extension à la liste déclarée précédente
la source
RewriteRule ^.env - [F,L,NC]
<Files ~ "\.env$"> Order allow,deny Deny from all </Files>
Dans Laravel 5.5 créez un fichier .htacess dans votre répertoire racine et placez le code suivant: - Lien de référence
la source
RewriteRule ^ ^$1 [N
]?PAS!
VOUS NE DEVEZ VRAIMENT PAS renommer
server.php
dans votre dossier racine Laravelindex.php
et copier le.htaccess
fichier du/public
répertoire dans votre dossier racine Laravel !!!De cette façon, tout le monde peut accéder à certains de vos fichiers (
.env
par exemple). Essayez-le vous-même. Tu ne veux pas ça!FAIRE
Au lieu de cela, vous devez créer un
.htaccess
fichier dans votre racine comme ceci:Cela réécrira silencieusement tous vos URI de base dans le
/public
dossier. Même tous les en- têtes , par exemple l'en-tête d'autorisation HTTP , et tous les paramètres URI facultatifs seront également transmis en silence au/public
dossier.C'est tout
Veuillez noter lors de la configuration d'un projet Laravel avec Docker: vous n'aurez pas besoin de le faire.
la source
Un moyen facile de supprimer le public de l'url de laravel 5. Il vous suffit de couper index.php et .htaccess du répertoire public et de les coller dans le répertoire racine, c'est tout et de remplacer deux lignes dans index.php comme
Remarque : La méthode ci-dessus est réservée aux débutants car ils peuvent rencontrer des problèmes lors de la configuration de l'hôte virtuel et la meilleure solution consiste à configurer l'hôte virtuel sur la machine locale et à la pointer vers le répertoire public du projet.
la source
@ rimon.ekjon a déclaré:
Ça marche pour moi. Mais tous les fichiers de ressources dans le répertoire / public n'ont pas pu trouver et les URL de demande n'ont pas fonctionné, car j'ai utilisé l'assistant asset ().
J'ai changé la fonction /Illuminate/Foundation/helpers.php/asset () comme suit:
Maintenant, tout fonctionne :)
Merci @ rimon.ekjon et à vous tous.
la source
RewriteRule ^(.*)$ public/$1 [L]
dans votre fichier .htaccess que vous avez copié du répertoire public, en supprimant cette ligneRewriteRule ^(.*)/$ /$1 [L,R=301]
Créez simplement un fichier .htaccess à la racine et ajoutez-y ces lignes
C'est tout!
Le code ci-dessus fonctionne sur le dossier public_html racine. Cela dit, votre fichier laravel principal devrait se trouver dans le dossier public_html, si votre répertoire ressemble à public_html / laravelapp / public et si vous placez le code ci-dessus dans laravelapp, cela ne fonctionnera pas. Par conséquent, vous devez copier tous vos fichiers principaux dans public_html et y placer le fichier .htaccess.
Si vous souhaitez conserver le code dans un sous-répertoire, vous pouvez créer un sous-domaine, ce code fonctionnera également pour cela.
la source
Créez un
.htaccess
fichier dans le répertoire racine et placez du code comme ci-dessous.la source
1) Je n'ai pas trouvé de méthode de travail pour déplacer le répertoire public en L5 . Bien que vous puissiez modifier certaines choses dans le bootstrap
index.php
, il semble que plusieurs fonctions d'assistance soient basées sur l'hypothèse que ce répertoire public est là. En toute honnêteté, vous ne devriez vraiment pas déplacer le répertoire public.2) Si vous utilisez MAMP, vous devez créer de nouveaux vhosts pour chaque projet, chacun servant le répertoire public de ce projet. Une fois créé, vous accédez à chaque projet par votre nom de serveur défini comme ceci:
la source
Il est possible de supprimer l' url publique dans laravel5. Suivez ces étapes:
étape 1.copiez tous les fichiers du public et collez-les dans le répertoire racine
étape 2. ouvrir le
index.php
fichier remplacer parà
et
à
Et supprimez tout le cache et les cookies.
la source
Supposons que vous ayez placé tous les autres fichiers et répertoires dans un dossier nommé «locale».
Allez simplement dans index.php et trouvez ces deux lignes:
et changez-les en ceci:
la source
Voici la meilleure et la plus courte solution qui fonctionne pour moi depuis mai 2018 pour Laravel 5.5
il suffit de couper votre
.htaccess
fichier du répertoire / public vers le répertoire racine et de le remplacer par le code suivant:Enregistrez simplement le
.htaccess
fichier et c'est tout.Renommez votre
server.php
fichier enindex.php
. c'est tout profiter!la source
Meilleure approche: je ne recommanderai pas de supprimer public, à la place
on local computer create a virtual host point to public directory
eton remote hosting change public to public_html and point your domain to this directory
. Raison, tout votre code laravel sera sécurisé car son niveau descend jusqu'à votre répertoire public :)MÉTHODE 1:
Je renomme juste
server.php
àindex.php
et il fonctionneMÉTHODE 2:
Cela fonctionne bien pour toutes les versions laravel ...
Voici ma structure de répertoire,
Suivez ces étapes faciles
à
et
à
à
et c'est tout, essayez maintenant http: // localhost / laravel /
la source
4 meilleures façons de supprimer le public de l'URL.
Si vous avez utilisé une autre astuce pour supprimer le public de l'URL, changez le nom de server.php en index.php et changez-le en chemin d'accès au fichier principal. De toute évidence, ne faites pas ça. Alors pourquoi Laravel ne donne pas la solution comme ça parce que ce n'est pas une bonne façon de le faire.
En ajoutant un fichier .htaccess à la racine, vous pouvez accéder au site Web sans public
Je donne ici une démo pour le système d'exploitation Windows. Mais je vais essayer de définir une étape pour que n'importe qui puisse facilement suivre l'étape. Vous pouvez également rechercher sur google la même chose pour le système d'exploitation particulier.
Étape 1: Allez dans C: \ Windows \ system32 \ drivers \ etc \ ouvrez le fichier "hosts" en mode Administrateur.
Étape 2: ajoutez-y le code suivant. Ici, je vous donne une démo de la démonstration du nom de domaine projectname.local, vous pouvez en spécifier à votre guise. Rendez-le constant à chaque endroit.
Étape 3: Maintenant, allez à,
C:\xampp\apache\conf\extra
pour les utilisateurs de xampp et pour l'utilisateur wamp"C:\wamp\bin\apache\Apache2.4.4\conf\extra"
et ouvrez le"httpd-vhosts.conf"
fichier. Maintenant, ajoutez-y le code suivant.Remarques: Modifiez la racine du document selon votre projet et ajoutez également le nom de domaine que vous définissez dans le fichier "hosts".
Étape 4: Dernier point, mais l'étape importante est de redémarrer votre Xampp ou Wamp et d'accéder à l'URL comme
http://projectname.local
et votre Laravel répondra sans URL publique.Si vous travaillez en local, vous n'avez rien à faire, il suffit d'exécuter la commande suivante à partir de votre terminal ou de votre outil de ligne de commande. Après cela, vous pouvez accéder à votre site Web par l'URL fournie par la ligne de commande.
Si vous souhaitez exécuter votre projet sur une adresse IP particulière, vous devez exécuter la commande suivante. Si vous travaillez sur un réseau local, si vous souhaitez autoriser d'autres personnes à accéder à votre site Web à partir du local, il vous suffit de vérifier votre adresse IP à l'aide de la ligne de commande en exécutant "ipconfig" après avoir exécuté votre adresse IP après la commande.
Si vous souhaitez exécuter votre projet sur une IP particulière avec un port particulier, vous devez exécuter la commande suivante.
Une fois le projet terminé, vous devez héberger le projet sur le serveur, puis il vous suffit de définir la racine du document de votre domaine dans le dossier public. Vérifiez la capture d'écran ci-dessous.
Selon la capture d'écran, si vous n'avez aucun dossier de projet dans le public_html, il vous suffit de définir la racine de votre document comme
"public_html/public"
.Référence prise d' ici
la source
Je voudrais ajouter à @Humble Learner et noter que l'emplacement approprié pour «corriger» le chemin de l'URL pour les actifs est /Illuminate/Routing/UrlGenerator.php/asset ().
Mettez à jour la méthode pour qu'elle corresponde:
Cela corrigera les scripts, les styles et les chemins d'image. Tout pour les chemins d'accès aux actifs.
la source
Pour que l'utilisateur XAMPP supprime le public de l'URL sans toucher au système de fichiers par défaut de laravel, vous devez définir un hôte virtuel pour votre application.
Ouvrez l'application du panneau de configuration XAMPP et arrêtez Apache. Sachez que les dernières machines Windows peuvent l'exécuter en tant que service, alors cochez la case à gauche du module Apache.
Accédez à
C:/xampp/apache/conf/extra
ou où se trouvent vos fichiers XAMPP.Ouvrez le fichier nommé httpd-vhosts.conf avec un éditeur de texte.
Autour de la ligne 19, recherchez #
NameVirtualHost *:80
et décommentez ou supprimez le hachage.Tout en bas du fichier, collez le code suivant:
C:/Windows/System32/drivers/etc/hosts
, où hôtes est le fichier. Ouvrez-le avec le bloc-notes.127.0.0.1 localhost
La résolution de nom localhost est gérée dans DNS lui-même.
L'article original se trouve ici
la source
Il y a toujours une raison d'avoir un dossier public dans la configuration de Laravel, tous les trucs liés au public doivent être présents dans le dossier public,
Il suffit d'écrire la condition de réécriture dans le
.htaccess
fichier et d'installer le module de réécriture et d'activer le module de réécriture, le problème qui ajoute du public dans l'itinéraire sera résolu.la source
Je sais que ce sont beaucoup de solutions à ce problème. La solution la meilleure et la plus simple consiste à ajouter un fichier .htaccess à la racine répertoire .
J'ai essayé les réponses que nous avons fournies pour ce problème, mais j'ai rencontré des problèmes avec auth: api guard à Laravel.
Voici la solution mise à jour:
Créez le fichier .htaccess dans votre répertoire racine et ajoutez ce code. Et tout va bien
la source
Laravel 5.5
Après avoir installé Laravel pour la première fois, j'ai fait face au fameux "problème de dossier public" et j'ai trouvé cette solution qui, à mon avis , est "plus propre" que les autres que j'ai trouvées sur le Web.
Réalisations
public
mot dans l'URI.env
fichier contre les personnes curieusesTout peut être fait simplement en éditant l'
.htaccess
utilisationmod_rewrite
et en quatre règles simples.Pas
.htaccess
fichier danspublic/.htaccess
dans la racine principaleJ'ai tout commenté, donc ça devrait être clair (j'espère) aussi à ceux qui ne l'ont jamais utilisé
mod_rewrite
(pas que je sois un expert, tout le contraire). De plus, pour comprendre les règles, il doit être clair que, à Laravel, si Bill se connecte àhttps://example.com
,https://example.com/index.php
est chargé. Ce fichier contient simplement la commandeheader("refresh: 5; https://example.com/public/")
, qui envoie la demande àhttps://example.com/public/index.php
. Cette secondeindex.php
est chargée de charger le contrôleur et d'autres trucs.La règle suivante (à l'origine
public/.htaccess
) peut être supprimée. En fait, la même règle est expliquée de manière plus détaillée dans les deux dernières règles.EDIT: J'ai raté la solution d' Abhinav Saraswat et sa réponse devrait être acceptée. Une seule règle simple et claire qui redirige tout le trafic vers le dossier public sans modifier aucun fichier.
la source
Tout d'abord, vous pouvez utiliser ces étapes
source: https://stackoverflow.com/a/28735930
après avoir suivi ces étapes, vous devez modifier tous les chemins css et script, mais cela sera fatigant.
Proposition de solution : vous pouvez simplement modifier légèrement
helpers::asset
fonction.Pour cela :
ouvert
vendor\laravel\framework\src\Illuminate\Foundation\helpers.php
goto ligne 130
écrire
"public/".$path
au lieu de$path
,la source
Activez le module mod_rewrite avec
et redémarrez l'apache
Pour utiliser mod_rewrite à partir de fichiers .htaccess (qui est un cas d'utilisation très courant), modifiez le VirtualHost par défaut avec
Sous "DocumentRoot / var / www / html", ajoutez les lignes suivantes:
Redémarrez à nouveau le serveur:
la source
J'ai lu un article avant et ça marche bien mais je ne sais vraiment pas si c'est sûr ou pas
Modifiez le fichier index.php
à
la source
Même si je ne recommande pas de mettre Laravel sur le dossier racine, il y a des cas où cela ne pourrait pas être évité; pour ces cas, les méthodes ci-dessus ne fonctionnent pas pour les actifs, j'ai donc fait une correction rapide en changeant le htaccess: après avoir copié server.php en index.php éditez le fichier .htaccess comme ceci:
C'était une solution rapide que je devais faire, donc tout le monde est le bienvenu pour le mettre à niveau.
la source
Le problème est que si vous tapez / public et qu'il sera toujours disponible dans l'url, j'ai donc créé un correctif qui devrait être placé dans le public / index.php
cette paix de code supprimera le public de l'URL et donnera un 404, puis redirigera vers l'URL sans le public
la source
Une autre méthode que j'utilise est de créer un lien symbolique (sous Linux, je ne sais pas pour Win) en utilisant la commande ln dans htdocs ou www ie
ln projectname/public project
Le site est donc accessible via localhost / projectla source
Vous pouvez supprimer un mot clé public de l'URL à l'aide de différentes méthodes.
1) Si vous utilisez un hébergement dédié et que vous avez un accès root, vous pouvez supprimer le mot-clé public de l'URL à l'aide de l'hôte virtuel. Vous devez donner le chemin DocumentRoot avec public. Donc, cela démarrera l'index du répertoire public et le supprimera de l'url.
2) Si vous n'avez pas accès root à votre hébergement, vous devez générer un nouveau fichier .htaccess dans votre répertoire racine et mettre le code comme ci-dessous
Vous pouvez obtenir plus de références ici.
la source
Créez un fichier .htaccess dans le répertoire racine et placez quelque chose comme ci-dessous.
Créez un fichier .htaccess dans le répertoire / public et placez quelque chose comme ci-dessous.
la source
J'ai trouvé la solution la plus efficace à ce problème.
Modifiez simplement votre
.htaccess
dans le dossier racine et écrivez le code suivant. Rien d'autre requisla source
j'ai essayé une solution ici et j'ai trouvé htaccess qui fonctionne pour laravel 5.2, comme ceci:
lorsque vous avez un autre fichier ou dossier à interdire, ajoutez simplement
la source
Vous n'avez pas besoin de faire grand-chose, créez simplement un fichier .htaccess dans le répertoire racine et collez / enregistrez ce qui suit;
la source