Ich weiß, dass dies eine sehr beliebte Frage ist, aber ich konnte keine funktionierende Lösung für Laravel 5 finden. Ich habe lange versucht, von Codeigniter zu migrieren, aber dieser komplizierte Installationsprozess schreckt mich immer wieder ab.
Ich möchte keine VM ausführen. Dies scheint beim Umschalten zwischen Projekten nur umständlich zu sein.
Ich möchte mein Dokumentstammverzeichnis nicht auf den öffentlichen Ordner festlegen. Dies ist auch beim Wechseln zwischen Projekten umständlich.
Ich habe die Methode .htaccess mod_rewrite ausprobiert
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Dies gibt mir nur eine Laravel NotFoundHttpException in der Zeile 7610 compiled.php.
Als ich vor einiger Zeit L4 ausprobiert habe, habe ich die Methode verwendet, um den Inhalt des öffentlichen Ordners in das Stammverzeichnis zu verschieben. Die Struktur von L5 ist sehr unterschiedlich und das Befolgen der gleichen Schritte hat Laravel völlig zerstört (der Server würde nur eine leere Seite zurückgeben).
Gibt es eine vernünftige Methode zum Entfernen von "public" in einer Entwicklungsumgebung, die:
- Funktioniert mit L5
- Ermöglicht es mir, problemlos zwischen Projekten zu wechseln (ich arbeite normalerweise gleichzeitig an 2 oder 3).
Vielen Dank
** Ich benutze MAMP und PHP 5.6.2
Antworten:
Für Laravel 5:
server.php
in Ihrem Laravel-Stammordner umindex.php
.htaccess
Datei aus dem/public
Verzeichnis in Ihren Laravel-Stammordner.Das ist es!
quelle
.env
Datei anfordern kann , wenn Sie dies tun, es sei denn, Sie sind damit<Files "log.txt">Order Allow,DenyDeny from all</Files>
behebt das von Ihnen angesprochene Problem. Ist es jetzt sicher oder mehr Risiko?log.txt
. Stellen Sie einfach sicher, dass Sie vertrauliche Daten für die Öffentlichkeit blockieren. Wenn Sie Laravel verwenden und die Dokumentation sorgfältig lesen , sieht Ihre Webroot so ausproject/public
. Schauen Sie sich diese Stackoverflow-Diskussion an . Richten Sie Ihren Webserver ein und versuchen Sie eshttps://example.com/.env
für alle Fälle. Wenn Sie Ihre Passwörter sehen, betrachten Sie alles als gefährdet und ändern Sie alle Passwörter.Ich habe das Problem mit 2 Antworten gelöst:
Ändern Sie .htaccess ein wenig wie folgt für die Statik:
Wenn andere statische Dateien benötigt werden, fügen Sie die Erweiterung einfach der zuvor deklarierten Liste hinzu
quelle
RewriteRule ^.env - [F,L,NC]
<Files ~ "\.env$"> Order allow,deny Deny from all </Files>
Erstellen Sie in Laravel 5.5 eine .htacess-Datei in Ihrem Stammverzeichnis und platzieren Sie den folgenden Code: - Referenzlink
quelle
RewriteRule ^ ^$1 [N
?NICHT!
SIE SOLLTEN WIRKLICH NICHT
server.php
in Ihrem Laravel-Stammordner umbenennenindex.php
und die.htaccess
Datei aus dem/public
Verzeichnis in Ihren Laravel-Stammordner kopieren !!!Auf diese Weise kann jeder auf einige Ihrer Dateien zugreifen (
.env
zum Beispiel). Versuch es selber. Das willst du nicht!MACHEN
Stattdessen sollten Sie eine
.htaccess
Datei in Ihrem Stammverzeichnis wie folgt erstellen :Dadurch werden alle Ihre Basis-URIs stillschweigend in den
/public
Ordner umgeschrieben . Auch alle Header , z. B. der HTTP-Autorisierungsheader , und alle optionalen URI-Parameter werden stillschweigend an den/public
Ordner übergeben.Das ist alles
Bitte beachten Sie beim Einrichten eines Laravel-Projekts mit Docker: Sie müssen dies nicht tun.
quelle
Einfache Möglichkeit, die Öffentlichkeit von Laravel 5 URL zu entfernen. Sie müssen nur index.php und .htaccess aus dem öffentlichen Verzeichnis ausschneiden und in das Stammverzeichnis einfügen, das ist alles, und zwei Zeilen in index.php als ersetzen
Hinweis : Die obige Methode ist nur für Anfänger gedacht, da sie möglicherweise Probleme beim Einrichten des virtuellen Hosts haben. Die beste Lösung besteht darin, den virtuellen Host auf dem lokalen Computer einzurichten und auf das öffentliche Verzeichnis des Projekts zu verweisen.
quelle
@ rimon.ekjon sagte:
Das funktioniert bei mir. Aber alle Ressourcendateien im Verzeichnis / public konnten nicht gefunden werden und Anforderungs-URLs funktionierten nicht, da ich den Asset-Helfer () verwendet habe.
Ich habe die Funktion /Illuminate/Foundation/helpers.php/asset () wie folgt geändert:
Jetzt funktioniert alles :)
Vielen Dank an @ rimon.ekjon und euch alle.
quelle
RewriteRule ^(.*)$ public/$1 [L]
Ihre .htaccess-Datei hinzufügen, die Sie aus dem öffentlichen Verzeichnis kopiert haben, indem Sie diese Zeile entfernenRewriteRule ^(.*)/$ /$1 [L,R=301]
Erstellen Sie einfach die .htaccess- Datei im Stammverzeichnis und fügen Sie diese Zeilen hinzu
Das ist es!
Der obige Code funktioniert im Stammordner public_html. Allerdings sollte sich Ihre Laravel-Kerndatei im Ordner public_html befinden. Wenn Ihr Verzeichnis wie public_html / laravelapp / public aussieht und Sie den obigen Code in laravelapp einfügen, funktioniert dies nicht. Daher müssen Sie alle Ihre Kerndateien in public_html kopieren und die .htaccess-Datei dort ablegen.
Wenn Sie den Code in einem Unterverzeichnis behalten möchten, können Sie eine Unterdomäne erstellen. Dieser Code funktioniert auch dafür.
quelle
Erstellen Sie eine
.htaccess
Datei im Stammverzeichnis und platzieren Sie den Code wie folgt.quelle
1) Ich habe keine Arbeitsmethode zum Verschieben des öffentlichen Verzeichnisses in L5 gefunden . Während Sie einige Dinge im Bootstrap ändern können
index.php
, scheinen mehrere Hilfsfunktionen auf der Annahme zu beruhen, dass dieses öffentliche Verzeichnis vorhanden ist. Ehrlich gesagt sollten Sie das öffentliche Verzeichnis wirklich nicht verschieben.2) Wenn Sie MAMP verwenden , sollten Sie für jedes Projekt neue vhosts erstellen, die jeweils das öffentliche Verzeichnis des Projekts bedienen. Nach der Erstellung greifen Sie über Ihren definierten Servernamen wie folgt auf jedes Projekt zu:
quelle
Es ist möglich, die Öffentlichkeit zu entfernen URL in laravel5 . Folge diesen Schritten:
Schritt 1.Kopieren alle Datei aus öffentlichen und fügen Sie ihn auf Root - Verzeichnis
Schritt 2.
index.php
Datei öffnen durch ersetzenzu
und
zu
Und entfernen Sie alle Cache und Cookies.
quelle
Angenommen, Sie haben alle anderen Dateien und Verzeichnisse in einem Ordner mit dem Namen "Gebietsschema" abgelegt.
Gehen Sie einfach zu index.php und suchen Sie diese beiden Zeilen:
und ändern Sie sie in diese:
quelle
Hier ist die beste und kürzeste Lösung, die für mich ab Mai 2018 für Laravel 5.5 funktioniert
Schneiden Sie einfach Ihre
.htaccess
Datei aus dem Verzeichnis / public in das Stammverzeichnis und ersetzen Sie den Inhalt durch den folgenden Code:Speichern Sie einfach die
.htaccess
Datei und das ist alles.Benennen Sie Ihre
server.php
Datei in umindex.php
. das ist alles genießen!quelle
BESTER Ansatz: Ich werde nicht empfehlen, stattdessen public
on local computer create a virtual host point to public directory
und zu entfernenon remote hosting change public to public_html and point your domain to this directory
. Grund dafür ist, dass Ihr gesamter Laravel-Code sicher ist, da er eine Ebene tiefer in Ihrem öffentlichen Verzeichnis liegt :)METHODE 1:
Ich umbenennen nur
server.php
anindex.php
und es funktioniertMethode 2:
Dies funktioniert gut für alle Laravel-Versionen ...
Hier ist meine Verzeichnisstruktur,
Befolgen Sie diese einfachen Schritte
zu
und
zu
zu
und das wars, versuchen Sie es jetzt mit http: // localhost / laravel /
quelle
4 beste Möglichkeiten, um public von der URL zu entfernen.
Wenn Sie einen anderen Trick verwendet haben, um die Öffentlichkeit von der URL zu entfernen, ändern Sie beispielsweise den Namen von server.php in index.php und wechseln Sie in den Kerndateipfad. Mach das natürlich nicht. Warum gibt Laravel dann nicht die Lösung wie diese, weil es kein richtiger Weg ist, dies zu tun?
Durch Hinzufügen einer .htaccess-Datei zum Stammverzeichnis können Sie ohne Veröffentlichung auf die Website zugreifen
Ich gebe hier eine Demo für das Windows-Betriebssystem. Aber ich werde versuchen, einen Schritt zu definieren, damit jeder dem Schritt leicht folgen kann. Sie können auch auf Google nach dem gleichen für das jeweilige Betriebssystem suchen.
Schritt 1: Gehen Sie zu C: \ Windows \ system32 \ drivers \ etc \ und öffnen Sie die Datei "hosts" im Administratormodus.
Schritt 2: Fügen Sie den folgenden Code hinzu. Hier gebe ich Ihnen eine Demo von projectname.local Domain Name Demo, die Sie beliebig angeben können. Machen Sie es einfach an jedem Ort konstant.
Schritt 3: Gehen Sie nun zu,
C:\xampp\apache\conf\extra
für xampp-Benutzer und für den wamp-Benutzer"C:\wamp\bin\apache\Apache2.4.4\conf\extra"
und öffnen Sie die"httpd-vhosts.conf"
Datei. Fügen Sie nun den folgenden Code hinzu.Anmerkungen: Ändern Sie den Dokumentstamm gemäß Ihrem Projekt. Fügen Sie außerdem den von Ihnen definierten Domänennamen in die Datei "Hosts" ein.
Schritt 4: Der vorletzte wichtige Schritt besteht darin, Xampp oder Wamp neu zu starten und auf die URL zuzugreifen
http://projectname.local
Ihr Laravel antwortet ohne öffentliche URL.Wenn Sie lokal arbeiten, müssen Sie nichts tun, sondern nur den folgenden Befehl von Ihrem Terminal oder Befehlszeilentool aus ausführen. Danach können Sie über die über die Befehlszeile angegebene URL auf Ihre Website zugreifen.
Wenn Sie bereit sind, Ihr Projekt unter einer bestimmten IP-Adresse auszuführen, müssen Sie den folgenden Befehl ausführen. Wenn Sie im LAN arbeiten und anderen Personen den Zugriff auf Ihre Website von lokal aus ermöglichen möchten, müssen Sie nur Ihre IP-Adresse mithilfe der Befehlszeile überprüfen, indem Sie "ipconfig" ausführen, nachdem Sie Ihre IP-Adresse gemäß dem Befehl ausgeführt haben.
Wenn Sie bereit sind, Ihr Projekt auf einer bestimmten IP mit einem bestimmten Port auszuführen, müssen Sie den folgenden Befehl ausführen.
Nach Abschluss des Projekts müssen Sie das Projekt auf dem Server hosten und dann nur den Dokumentenstamm in Ihrer Domäne auf den öffentlichen Ordner setzen. Überprüfen Sie den folgenden Screenshot.
Wenn Sie laut Screenshot keinen Projektordner in public_html haben, müssen Sie nur Ihren Dokumentstamm wie folgt festlegen
"public_html/public"
.Referenz von hier genommen
quelle
Ich möchte @Humble Learner hinzufügen und beachten, dass der richtige Speicherort zum "Korrigieren" des URL-Pfads für Assets /Illuminate/Routing/UrlGenerator.php/asset () ist.
Aktualisieren Sie die Methode entsprechend:
Dadurch werden Skripte, Stile und Bildpfade korrigiert. Alles für Asset-Pfade.
quelle
Damit XAMPP-Benutzer public aus der URL entfernen können, ohne das Standarddateisystem von laravel zu berühren, müssen Sie einen virtuellen Host für Ihre Anwendung festlegen, um dies zu tun. Befolgen Sie dazu die folgenden Schritte
Öffnen Sie die XAMPP-Systemsteuerungsanwendung und stoppen Sie Apache. Beachten Sie, dass späte Windows-Computer es möglicherweise als Dienst ausführen. Aktivieren Sie daher das Kontrollkästchen links neben dem Apache-Modul.
Navigieren Sie zu
C:/xampp/apache/conf/extra
oder wo immer sich Ihre XAMPP-Dateien befinden.Öffnen Sie die Datei mit dem Namen httpd-vhosts.conf mit einem Texteditor.
Suchen Sie in Zeile 19 #
NameVirtualHost *:80
und kommentieren Sie den Hash aus oder entfernen Sie ihn.Fügen Sie ganz unten in der Datei den folgenden Code ein:
C:/Windows/System32/drivers/etc/hosts
, wo Hosts die Datei ist. Öffnen Sie es mit dem Editor.127.0.0.1 localhost
Die Auflösung des lokalen Hostnamens erfolgt innerhalb von DNS.
Den Originalartikel finden Sie hier
quelle
Es gibt immer einen Grund, einen öffentlichen Ordner im Laravel-Setup zu haben. Alle öffentlich zugänglichen Inhalte sollten im öffentlichen Ordner vorhanden sein.
Schreiben Sie einfach die Umschreibbedingung in die
.htaccess
Datei, installieren Sie das Umschreibemodul und aktivieren Sie das Umschreibemodul. Das Problem, das die Route öffentlich macht, wird gelöst.quelle
Ich weiß, dass dies eine Menge Lösungen für dieses Problem sind. Die beste und einfachste Lösung ist das Hinzufügen einer .htaccess- Datei im Stammverzeichnis .
Ich habe die Antworten ausprobiert, die wir für dieses Problem gegeben haben, aber ich hatte einige Probleme mit auth: api guard in Laravel.
Hier ist die aktualisierte Lösung:
Erstellen Sie die .htaccess-Datei in Ihrem Stammverzeichnis und fügen Sie diesen Code hinzu. Und alles geht gut
quelle
Laravel 5.5
Nachdem ich Laravel zum ersten Mal installiert hatte, sah ich mich dem bekannten "Problem mit öffentlichen Ordnern" gegenüber und fand diese Lösung, die meiner persönlichen Meinung nach "sauberer" ist als die anderen, die ich im Web gefunden habe.
Erfolge
public
Wort in der URI.env
Datei vor neugierigen PersonenAlles kann getan werden,
.htaccess
indem nur die Verwendungmod_rewrite
und vier einfache Regeln bearbeitet werden .Schritte
.htaccess
Dateipublic/.htaccess
in das HauptstammverzeichnisIch habe alles kommentiert, daher sollte es auch denen klar sein (ich hoffe), die es noch nie benutzt haben
mod_rewrite
(nicht, dass ich ein Experte bin, im Gegenteil). Um die Regeln zu verstehen, muss außerdem klar sein, dass in Laravel, wenn Bill eine Verbindung herstellthttps://example.com
,https://example.com/index.php
geladen wird. Diese Datei enthält nur den Befehlheader("refresh: 5; https://example.com/public/")
, an den die Anforderung gesendet wirdhttps://example.com/public/index.php
. Diese Sekundeindex.php
ist dafür verantwortlich, den Controller und andere Dinge zu laden.Die folgende Regel (ursprünglich in
public/.htaccess
) kann gelöscht werden. Die gleiche Regel wird in den letzten beiden Regeln ausführlicher erläutert.EDIT: Ich habe Abhinav Saraswats Lösung verpasst und seine Antwort sollte die akzeptierte sein. Nur eine einfache und klare Regel, die den gesamten Datenverkehr in den öffentlichen Ordner umleitet, ohne eine Datei zu ändern.
quelle
Erstens können Sie diese Schritte verwenden
Quelle: https://stackoverflow.com/a/28735930
Nachdem Sie diese Schritte ausgeführt haben, müssen Sie alle CSS- und Skriptpfade ändern. Dies ist jedoch anstrengend.
Lösungsvorschlag : Sie können die
helpers::asset
Funktion einfach geringfügig ändern .Dafür :
öffnen
vendor\laravel\framework\src\Illuminate\Foundation\helpers.php
gehe zu Zeile 130
schreiben
"public/".$path
statt$path
,quelle
Aktivieren Sie das mod_rewrite-Modul mit
und starten Sie den Apache neu
Um mod_rewrite aus .htaccess-Dateien heraus zu verwenden (was ein sehr häufiger Anwendungsfall ist), bearbeiten Sie den Standard-VirtualHost mit
Fügen Sie unter "DocumentRoot / var / www / html" die folgenden Zeilen hinzu:
Starten Sie den Server erneut:
quelle
Ich habe bereits einen Artikel gelesen und er funktioniert einwandfrei, weiß aber nicht, ob er sicher ist oder nicht
Bearbeiten Sie die index.php
zu
quelle
Auch wenn ich nicht empfehle, Laravel in den Stammordner zu legen, gibt es einige Fälle, in denen dies nicht vermieden werden konnte. In diesen Fällen funktionieren die oben genannten Methoden nicht für Assets. Daher habe ich eine schnelle Korrektur vorgenommen, um den htaccess zu ändern: Nachdem Sie server.php in index.php kopiert haben, bearbeiten Sie die .htaccess-Datei wie folgt:
Dies war eine schnelle Lösung, die ich vornehmen musste, damit jeder sie aktualisieren kann.
quelle
Problem ist, wenn Sie / public eingeben und es weiterhin in der URL verfügbar ist, habe ich einen Fix erstellt, der in der public / index.php platziert werden sollte
Dieser Code-Frieden entfernt die Öffentlichkeit aus der URL und gibt eine 404 und leitet dann ohne die Öffentlichkeit zur URL weiter
quelle
Eine andere Methode, die ich verwende, ist das Erstellen eines symbolischen Links (unter Linux weiß ich nichts über Win) mit dem Befehl ln in htdocs oder www, dh
ln projectname/public project
die Site ist somit über localhost / project zugänglichquelle
Sie können öffentliche Schlüsselwörter mit verschiedenen Methoden aus der URL entfernen.
1) Wenn Sie dediziertes Hosting verwenden und Root-Zugriff haben, können Sie öffentliche Schlüsselwörter mithilfe von Virtual Host aus der URL entfernen. Sie sollten den DocumentRoot-Pfad mit public angeben. Dies startet also den Index aus dem öffentlichen Verzeichnis und entfernt ihn aus der URL.
2) Wenn Sie keinen Root-Zugriff auf Ihr Hosting haben, sollten Sie eine neue .htaccess-Datei in Ihrem Root-Verzeichnis erstellen und den folgenden Code eingeben
Weitere Informationen finden Sie hier.
quelle
Erstellen Sie eine .htaccess-Datei im Stammverzeichnis und platzieren Sie den Code wie folgt.
Erstellen Sie die .htaccess-Datei im Verzeichnis / public und platzieren Sie den Code wie folgt.
quelle
Ich habe die funktionierendste Lösung für dieses Problem gefunden.
Bearbeiten nur
.htaccess
im Stammordner und schreiben Sie den folgenden Code ein . Sonst nichts erforderlichquelle
Ich habe hier eine Lösung ausprobiert und festgestellt, dass htaccess für Laravel 5.2 wie folgt funktioniert:
Wenn Sie eine andere Datei oder einen anderen Ordner verboten haben, fügen Sie diese einfach hinzu
quelle
Sie müssen nicht viel tun, erstellen Sie einfach eine .htaccess-Datei im Stammverzeichnis und fügen Sie Folgendes ein / speichern Sie es.
quelle