So entfernen Sie /public/ von einer Laravel-URL

Lesezeit: 8 Minuten

Benutzeravatar von user1537360
Benutzer1537360

Ich möchte die entfernen /public/ Fragment aus meinen Laravel 5 URLs.

Ich möchte keine VM ausführen, das scheint nur umständlich zu sein, wenn ich zwischen Projekten wechsele.

Ich möchte meinen Dokumentenstamm nicht auf den öffentlichen Ordner setzen, das ist auch umständlich, wenn ich zwischen Projekten wechsele.

Ich habe die Methode .htaccess mod_rewrite ausprobiert:

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

aber das gibt mir eine Laravel NotFoundHttpException in der compiled.php-Zeile 7610.

In Laravel 4 konnte ich den Inhalt des öffentlichen Ordners in das Stammverzeichnis verschieben. Die Struktur von Laravel 5 ist ganz anders und nach den gleichen Schritten brach Laravel vollständig zusammen (der Server würde nur eine leere Seite zurückgeben).

Gibt es eine Methode zum Entfernen von „öffentlich“ in einer Entwicklungsumgebung, mit der ich problemlos zwischen Projekten wechseln kann (ich arbeite normalerweise an 2 oder 3 gleichzeitig)?

Ich verwende MAMP und PHP 5.6.2

  • Es scheint zu funktionieren, indem nur die Pfade in der Datei index.php geändert werden, aber ich bin neu bei Laravel und kann daher offensichtlich nicht kommentieren, ob dies stabil / sicher ist.

    – Benutzer1537360

    6. Februar 2015 um 13:06 Uhr

  • Die anderen Ordner/Dateien sollten sich unter Ihrem Dokumentenstamm befinden.

    – Mike Rockett

    7. Februar 2015 um 18:04 Uhr

  • laravel öffentlich von url entfernen

    – Benutzer3151197

    27. September 2017 um 16:30 Uhr

  • Die meisten Antworten auf dieser Seite sind unglaublich schlechte Praktiken. Die EINZIGE sichere Lösung ist, die zu ändern Dokument Root Ihres Webhosts als öffentlicher Ordner. Wenn Sie sich auf einem Server befinden, der nur den Ordner public_html veröffentlicht, löschen Sie diesen und erstellen Sie einen neuen symbolischen Link public_html, der auf den öffentlichen Laravel-Ordner verweist und diesen als Alias ​​bezeichnet.

    – Snapey

    22. März 2022 um 22:32 Uhr

  • A public Ordner ist da, um im Dokumentstammverzeichnis verfügbar gemacht zu werden, und sonst nichts. Wenn Sie dies nicht tun, treten Sicherheitsprobleme zwischen dem privaten Speicher, auf den zugegriffen werden kann, der env-Datei und anderen sensiblen Dateien auf. Ändern Sie Ihren Dokumentenstamm!gibt es keinen triftigen Grund, dies nicht anderswo als in einer lokalen Umgebung zu tun, es ist, als würde man kein Passwort in der Datenbank hashen

    – Tofandel

    31. August 2022 um 10:25 Uhr


Benutzeravatar von Asfaq Tamim
Asfaq Tamim

Hinweis: Dies führt zu erheblichen Sicherheitsproblemen und wird nicht empfohlen.

Für Laravel5:

  1. Umbenennen server.php in Ihrem Laravel-Stammordner nach index.php
  2. Kopiere das .htaccess Datei aus /public Verzeichnis in Ihren Laravel-Stammordner.

  • Bitte überprüfen Sie andere Antworten, indem Sie nur eine .htacess-Datei in Ihrem Stammverzeichnis erstellen, da diese Antwort vertrauliche Informationen (wie eine .env-Datei) offenlegen kann.

    – Mauronet

    21. November 2020 um 0:02 Uhr

  • Ihre Website ist für Hacker verfügbar, da die .env-Datei für alle sichtbar ist.

    – Abd Abughazaleh

    22. November 2020 um 11:27 Uhr

  • @AbdAbughazaleh Was ist, wenn Sie die Berechtigung für die .env-Datei auf 600 ändern?

    – Mohammad Salehi

    12. Mai 2022 um 9:13 Uhr

Benutzeravatar von Derk Jan Speelman
Derk Jan Speelman


BITTE BEACHTEN SIE wenn Sie ein Laravel-Projekt mit Docker bedienen: Sie müssen nichts davon tun. Verwenden Sie nur diese Option wenn Ihre Wurzel (oder häufiger: public_html)-Verzeichnis Ihrer Website ist Ihr Laravel-Projekt (dies ist nicht der Fall, wenn Sie Docker verwenden).

NICHT!

SIE SOLLTEN WIRKLICH NICHT umbenennen server.php in Ihrem Laravel-Stammordner nach index.php
und kopiere die .htaccess Datei aus der /public Verzeichnis in Ihren Laravel-Stammordner !!!

Auf diese Weise kann jeder auf einige Ihrer Dateien zugreifen (.env Zum Beispiel). Versuch es selber. Das willst du nicht!


TUN

Stattdessen sollten Sie eine erstellen .htaccess Datei in Ihrem Stamm wie folgt:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]

Dadurch werden alle Ihre Basis-URIs stillschweigend in die umgeschrieben /public Ordner. Sogar alle ÜberschriftenZum Beispiel den HTTP-Autorisierungs-Headerund alle optionalen URI-Parameter werden stillschweigend an die weitergegeben /public Ordner auch.

  • @HaritsinhGohil treten Sie diesem Raum chat.stackoverflow.com/rooms/196804/laravel-and-htaccess bei, um unser Gespräch fortzusetzen

    – Derk Jan Speelman

    22. Juli 2019 um 11:16 Uhr


  • Hallo, @DerkJanSpeelman. Ich versuche, meine Laravel-Dateien in einen Unterordner in meinem Hosting hochzuladen, wie z. B.: (example.com/projects/laravel/blog). In diesem Fall müssen Besucher example.com/projects/laravel/blog/ besuchen. public, sodass ich eine .htaccess-Datei mit Ihrem Code im Stammverzeichnis des Blogordners ablege und möchte, dass sie in den öffentlichen Ordner umgeleitet wird. Aber es funktioniert nicht. Hier tritt der Fehler auf: Die angeforderte URL /public/ wurde auf diesem Server nicht gefunden. Wie kann ich das lösen?

    – Schowan

    21. August 2019 um 6:36 Uhr

  • @ShovonDas Wenn Sie Ihre Benutzer dazu bringen möchten, zu gehen example.com/projects/laravel/blog/. Erstellen Sie zuerst das Laravel-Projekt in der blog Ordner. Ersetzen RewriteCond %{REQUEST_URI} !^/public/ mit RewriteCond %{REQUEST_URI} !^/projects/laravel/blog/public/ Und RewriteRule ^(.*)$ /public/$1 [L,QSA] mit RewriteRule ^projects/laravel/blog/(.*)$ /projects/laravel/blog/public/$1 [L,QSA] ICH denken das funktioniert. Gib mir Bescheid. Der RewriteRule funktioniert wie: RewriteRule pattern target [Flag1,Flag2,Flag3] Apache RewriteRule-Dokumentation

    – Derk Jan Speelman

    21. August 2019 um 8:36 Uhr


  • @RaitisKupce und Riosant medium.com/@crocodile2u/…

    – Derk Jan Speelmann

    28. Dezember 2020 um 14:01 Uhr

  • @logudotcom Wenn Sie auf bestimmte statische Dateien auf Ihrer Website zugreifen möchten, müssen Sie ihnen Zugriff gewähren. Das geht mit htaccess. Ich empfehle dringend, sich die htaccess-Dokumentation anzusehen developer.mozilla.org/en-US/docs/Learn/Server-side/…

    – Derk Jan Speelmann

    2. Dezember 2021 um 9:47 Uhr


Benutzeravatar von ka_lin
ka_lin

Ich habe das Problem mit 2 Antworten gelöst:

  1. Umbenennen der server.php in index.php (keine Änderungen)
  2. Kopieren Sie die .htaccess-Datei aus dem öffentlichen Ordner in den Stammordner (wie rimon.ekjon unten sagte)
  3. Ändern Sie .htaccess für Statiken wie folgt ein wenig:

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]
    
    RewriteCond %{REQUEST_URI} !(\.css|\.js|\.png|\.jpg|\.gif|robots\.txt)$ [NC]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^/public/
    RewriteRule ^(css|js|images)/(.*)$ public/$1/$2 [L,NC]
    

    Falls es noch andere gibt statische Dateien benötigt, fügen Sie einfach die Erweiterung der zuvor deklarierten Liste hinzu

  • Das hat bei mir wie ein Knall funktioniert! Es löst im Grunde das Problem, dass keine Routen außer der Homepage funktionieren, und wenn Sie dann die Lösung von Derk ausprobieren, würde es funktionieren, aber nicht für alle Assets und Bilder. Dadurch wurden die Routen und auch die Assets und Bilder korrigiert. Vielen Dank. 🙂

    – Leutecia

    2. Januar um 16:35 Uhr


Erstellen Sie in Laravel 5.5 eine .htacess-Datei in Ihrem Stammverzeichnis und platzieren Sie den folgenden Code:- Referenzlink

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php

</IfModule>

Benutzeravatar von Pallav Nagar
Pallav Nagar

Erstelle ein .htaccess Datei in Wurzel Verzeichnis und platzieren Sie Code wie unten. Dadurch kann Ihre .env-Datei jedoch weiterhin über eine URL aufgerufen werden, sodass sie nicht sicher ist.

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php
</IfModule>

  • Es funktioniert gut, aber die .env-Datei ist immer noch direkt über die URL zugänglich.

    – Manoj Singh

    19. Dezember 2019 um 9:13 Uhr

Einfache Möglichkeit, die Öffentlichkeit von der URL von Laravel 5 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

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

Notiz: 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 ihn auf das öffentliche Verzeichnis des Projekts zu verweisen.

  • Es funktioniert gut, aber die .env-Datei ist immer noch direkt über die URL zugänglich.

    – Manoj Singh

    19. Dezember 2019 um 9:13 Uhr

Benutzeravatar von TylerH
TylerH

Diese Antwort wird nicht empfohlen, da sie vom Anbieter bereitgestellte Dateien bearbeitet. Behandeln Sie es stattdessen über eine Änderung an Ihrem .htaccess Datei wird empfohlen.


Rimon Ekjon sagte:

Benennen Sie die server.php in Ihrem Laravel-Stammordner in index.php um und kopieren Sie die .htaccess-Datei aus dem /public-Verzeichnis in Ihren Laravel-Stammordner.

Dies funktionierte, aber als ich diese Änderung vornahm, konnten alle Ressourcendateien im /public-Verzeichnis nicht gefunden werden, und Anforderungs-URLs funktionierten nicht, weil ich einen asset()-Helfer verwendet habe.

Ich habe die Funktion /Illuminate/Foundation/helpers.php/asset() wie folgt geändert:

function asset($path, $secure = null)
{
    return app('url')->asset("public/".$path, $secure);
}

Jetzt funktioniert alles wieder.

  • Dies ist keine gute Möglichkeit, dieses Problem zu lösen, da Sie versuchen, im Herstellerverzeichnis zu aktualisieren, was keine gute Vorgehensweise ist.

    – Schadmann

    25. Januar 2018 um 6:56 Uhr

  • Sie müssen nur hinzufügen RewriteRule ^(.*)$ public/$1 [L] in Ihrer .htaccess-Datei, die Sie aus dem öffentlichen Verzeichnis kopiert haben, indem Sie diese Zeile entfernen RewriteRule ^(.*)/$ /$1 [L,R=301]

    – Schadmann

    25. Januar 2018 um 7:17 Uhr


  • Wer ist Rimon Ekjon und wo haben Sie gesehen, wie sie dieses Zitat sagten?

    – TylerH

    11. April um 14:29 Uhr

1449500cookie-checkSo entfernen Sie /public/ von einer Laravel-URL

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy