Wie kann ich „public/index.php“ in der generierten Laravel-URL entfernen? [duplicate]

Lesezeit: 9 Minuten

TuGordoBellos Benutzeravatar
TuGordoBello

Ich muss entfernen index.php oder public/index.php von der generierten URL in Laravel; üblicherweise ist Pfad localhost/public/index.php/someWordForRouteEs sollte so etwas sein localhost/someWordForRoute.

.htaccess

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

RewriteEngine On

# Redirect Trailing Slashes.
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php[L]

app/config/app.php

'url' => 'http://localhost',

Wie kann ich das ändern?

  • Hübsche URLs in Laravel. Stellen Sie sicher mod_rewrite aktiviert.

    – Kryten

    23. Mai 2014 um 20:36


  • stackoverflow.com/questions/21662378/…

    – Das Alpha

    23. Mai 2014 um 20:39

  • @Kryten funktioniert nicht =/

    – TuGordoBello

    26. Mai 2014 um 19:13

  • Dies ist die Lösung, wenn die andere Lösung nicht funktioniert dev-metal.com/enable-mod_rewrite-ubuntu-14-04-lts

    – TuGordoBello

    28. Mai 2014 um 19:38

  • Zeigt Ihr Dokumentstammverzeichnis auf den vorgesehenen Ordner, d. h /var/www/project_name/public

    – Kiee

    25. Okt. 2014 um 10:48

Benutzeravatar von Luzan Baral
Luzan Baral

Option 1: Verwenden Sie .htaccess

Wenn sie noch nicht vorhanden ist, erstellen Sie eine .htaccess-Datei im Laravel-Stammverzeichnis. Ein … kreieren .htaccess Legen Sie Ihr Laravel-Stammverzeichnis ab, falls es noch nicht vorhanden ist. (Normalerweise liegt es unter Ihrem public_html Ordner)

Bearbeiten Sie die .htaccess-Datei so, dass sie den folgenden Code enthält:

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

Jetzt sollten Sie ohne den Teil „/public/index.php/“ auf die Website zugreifen können.

Option 2: Verschieben Sie Dinge im Verzeichnis „/public“ in das Stammverzeichnis

Erstellen Sie einen neuen Ordner in Ihrem Stammverzeichnis und verschieben Sie alle Dateien und Ordner mit Ausnahme des öffentlichen Ordners. Sie können es so nennen, wie Sie wollen. Ich verwende „laravel_code“.

Als nächstes verschieben Sie alles aus dem öffentlichen Verzeichnis in den Stammordner. Es sollte etwas Ähnliches ergeben:
Geben Sie hier eine Bildbeschreibung ein

Danach müssen wir nur noch die Standorte im bearbeiten laravel_code/bootstrap/paths.php Datei und die index.php Datei.

In laravel_code/bootstrap/paths.php Finden Sie die folgende Codezeile:

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

Und ändern Sie sie in:

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

In index.phpfinden Sie diese Zeilen:

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

Und ändern Sie sie in:

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

Quelle: So entfernen Sie /public/ aus der URL in Laravel

  • Wenn Sie Debian Linux verwenden, vergessen Sie nicht, es zu bearbeiten etc/apache2/apache2.conf wechselnd von AllowOverride None Zu AllowOverride All wo Sie die Verzeichniskonfiguration sehen, <Directory /var/www/></Directory> .

    – Robin Hood

    20. Januar 2015 um 15:21


  • Ich musste nur die .htaccess-Datei in meinem Stammverzeichnis haben, damit es funktionierte.

    – Mário Rodrigues

    4. Februar 2015 um 11:20 Uhr

  • Der Wechsel nach /root ist im Produktionsmodus überhaupt kein guter Rat! Es gibt einen Grund, warum der öffentliche Ordner existiert

    – Zehenplatte

    4. April 2015 um 7:44

  • Um sicherzustellen, dass die Rewrite-Regeln funktionieren, überprüfen Sie, ob die Apache-Konfiguration <Directory ... config hat AllowOverride All' Etwas wie das: <Directory "/var/www/html/laravel/public"> Options Indexes FollowSymLinks MultiViews **AllowOverride All** </Directory>

    – Japheth Ongeri – inkalimeva

    20. Mai 2015 um 18:04


  • Auf keinen Fall. Tu das niemals.

    – Daniel Steiner

    30. Mai 2016 um 14:11 Uhr

Ich habe es auf Laravel 4.2 versucht

Benennen Sie die um server.php im Stammordner Ihres Laravel index.php und kopieren Sie die .htaccess Datei von /public Verzeichnis in Ihren Laravel-Stammordner.

Ich hoffe, es funktioniert

  • Wenn die von Luazan akzeptierte Antwort nicht funktioniert, reicht dies aus. Allerdings würde ich darauf achten, die Datei index.php im öffentlichen Ordner zu bearbeiten, um Benutzer aus dem öffentlichen Ordner umzuleiten, wenn sie direkt zu diesem Link gehen.

    – Brad Bird

    7. März 2015 um 9:21

  • Die JS- und CSS-Dateien werden nicht mehr aus dem öffentlichen Ordner geladen

    – llioor

    20. August 2015 um 22:27 Uhr

  • @MaHDyfo – warum ist es nicht sicher? und wie ?

    – 151291

    15. Juni 2018 um 17:31 Uhr

  • @151291, weil die .env-Datei für jeden zugänglich ist, der Ihre Website auf diese Weise besucht. es sei denn, Sie sichern Ihren Webserver, um dies zu vermeiden.

    – Mahdyfo

    18. Juni 2018 um 16:34

Benutzeravatar von Ankit Vishwakarma
Ankit Vishwakarma

Lassen Sie sich nicht mit der anderen Option verwechseln. Das Snippet unten verwende ich und wird auch für Sie nützlich sein. Fügen Sie die folgenden htacces in Ihr Stammverzeichnis ein.

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

Gehen Sie in Ihr öffentliches Verzeichnis und fügen Sie eine weitere htaccess-Datei mit dem folgenden Codeausschnitt ein

<IfModule mod_rewrite.c>
    RewriteEngine On
    # Removes index.php from ExpressionEngine URLs  
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L]

</IfModule>

Es funktioniert… !!!

Laravel verwendet unten .htaccess

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

  • Großartig: Können Sie mir sagen, welche Vor- und Nachteile diese Methode hat?

    – Muhammad Ateek

    6. September 2016 um 5:17 Uhr

  • Ich habe nur die .htaccess-Datei im Root (Ihr erstes Snippet) bearbeitet und das hat das Problem für mich behoben, danke!

    – peird

    28. Januar 2020 um 17:41 Uhr

  • In Laravel 9 ist dies die einzige Option

    – Shalin Nipuna

    11. März 2022 um 3:19

1) Überprüfen Sie, ob mod_rewrite aktiviert ist. Gehe zu /etc/apache2/mods-enabled Verzeichnis und prüfen Sie, ob die rewrite.load ist verfügbar. Wenn nicht, aktivieren Sie es mit dem Befehl sudo a2enmod rewrite.Dadurch wird das Rewrite-Modul aktiviert. Wenn es bereits aktiviert ist, wird die Meldung angezeigt Module rewrite already enabled.
2)Erstellen Sie einen virtuellen Host für das öffentliche Verzeichnis, anstatt ihn freizugeben http://localhost/public/index.php Wir werden es so nutzen können http://example.com/index.php. [hence public folder name will be hidded]

3) Erstellen Sie dann eine .htaccess-Datei, die die index.php vor Ihrer URL verbirgt, die sich im Stammverzeichnis (öffentlicher Ordner) befinden sollte.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]

Khandad Niazis Benutzeravatar
Khandad Niazi

HIER SIND EINFACHE SCHRITTE ZUM ENTFERNEN DER ÖFFENTLICHEN IN-URL (Laravel 5)

1: Kopieren Sie alle Dateien aus dem öffentlichen Ordner und fügen Sie sie im Laravel-Stammordner ein

2: Öffnen Sie index.php und ändern Sie es

Aus

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

Zu

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

Und

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

Zu

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

In Laravel 4 ist Pfad 2 $app = require_once __DIR__.'/bootstrap/start.php'; anstatt $app = require_once __DIR__.'/bootstrap/app.php';/app.php

Das ist es.

  • Gibt es weitere Komplikationen im Zusammenhang mit anderen Links auf der Website?

    – Haring10

    7. Dezember 2015 um 9:56

  • Das sieht nach einer großartigen und auch einfachen Lösung aus. Aber wirklich, wie Haring10 sagte. Gibt es diesbezüglich Probleme?

    – Peter

    30. März 2016 um 9:21 Uhr

Udhav Sarvaiyas Benutzeravatar
Udhav Sarvaiya

Für Laravel 4 und 5:

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

Das ist es !! 🙂 🙂

  • Gibt es weitere Komplikationen im Zusammenhang mit anderen Links auf der Website?

    – Haring10

    7. Dezember 2015 um 9:56

  • Das sieht nach einer großartigen und auch einfachen Lösung aus. Aber wirklich, wie Haring10 sagte. Gibt es diesbezüglich Probleme?

    – Peter

    30. März 2016 um 9:21 Uhr

Benutzeravatar der Community
Gemeinschaft

Dies hat wahrscheinlich sehr wenig mit Laravel zu tun und alles mit Ihren Apache-Konfigurationen.

Haben Sie Zugriff auf Ihre Apache-Serverkonfiguration? Wenn ja, schauen Sie sich dies in den Dokumenten an:

Im Allgemeinen sollten Sie .htaccess-Dateien nur verwenden, wenn Sie keinen Zugriff auf die Hauptkonfigurationsdatei des Servers haben. Es gibt beispielsweise ein weit verbreitetes Missverständnis, dass die Benutzerauthentifizierung immer in .htaccess-Dateien erfolgen sollte, und in jüngerer Zeit ein weiteres Missverständnis, dass mod_rewrite-Direktiven in .htaccess-Dateien gespeichert werden müssen. Das ist einfach nicht der Fall. Sie können Benutzerauthentifizierungskonfigurationen in die Hauptserverkonfiguration einfügen, und dies ist tatsächlich die bevorzugte Vorgehensweise. Ebenso funktionieren mod_rewrite-Anweisungen in vielerlei Hinsicht besser in der Hauptserverkonfiguration.

… Generell sollte die Verwendung von .htaccess-Dateien nach Möglichkeit vermieden werden. Jede Konfiguration, die Sie in eine .htaccess-Datei einfügen möchten, kann genauso gut in einem Abschnitt Ihrer Hauptserverkonfigurationsdatei vorgenommen werden.

Quelle: Apache-Dokumentation.

Der Grund, warum ich dies zuerst erwähne, ist, dass es am besten ist, es loszuwerden .htaccess vollständig, wenn Sie können, und verwenden Sie a Directory Tag in einem VirtualHost Schild. Abgesehen davon wird der Rest davon ausgehen, dass Sie dabei bleiben .htaccess Route aus welchem ​​Grund auch immer.

Um dies aufzuschlüsseln, könnten ein paar Dinge passieren:

  1. Ich stelle vielleicht sinnlos fest, dass Ihre Datei einen Namen hat .htacces in deiner Frage. Ich vermute, dass es sich um einen Tippfehler handelt, aber für den Fall, dass Sie ihn übersehen haben und tatsächlich nur das zweite s fehlt, handelt es sich genau um einen kleinen Fehler, der mich auf der Suche nach etwas Schwierigerem mit dem Kopf gegen die Wand schlagen würde .

  2. Ihr Server könnte dies nicht zulassen .htaccess. Um dies zu überprüfen, gehen Sie zu Ihrer Apache-Konfigurationsdatei. In modernen Apache-Builds befindet sich dies normalerweise nicht in einer Konfigurationsdatei. Stellen Sie daher sicher, dass Sie die Datei verwenden, die auf Ihre App verweist, wo immer diese vorhanden ist. Ändern

    AllowOverride none
    

    Zu

    AllowOverride all
    

    Als Folgemaßnahme wird in den Apache-Dokumenten außerdem empfohlen, dies aus Sicherheitsgründen nicht für jeden Ordner zu tun, wenn Sie dies wünschen .htaccess zum Umschreiben. Führen Sie dies stattdessen für die Ordner aus, die Sie hinzufügen müssen .htaccess Zu.

  3. Haben Sie mod_rewrite ermöglicht? Das könnte die Ursache für die Probleme sein. Mir ist aufgefallen, dass Sie das Tag oben haben <IfModule mod_rewrite.c>. Kommentieren Sie diese Tags aus und starten Sie Apache neu. Wenn Sie eine Fehlermeldung erhalten, liegt das wahrscheinlich daran, dass Sie die Funktion aktivieren müssen mod_rewrite: So aktivieren Sie mod_rewrite für Apache 2.2

Hoffe das hilft. Ich habe einige der häufigsten Probleme genannt, aber es gibt auch einige andere, die banaler oder einzigartiger sein könnten. Noch ein Vorschlag für einen Entwicklungsserver? Installieren Sie Apache neu. Wenn möglich, verwenden Sie dazu eine andere Quelle mit einem guten Tutorial.

  • Toller Haken für die Apache2-Konfigurationseinstellungen, ich vermisse diese Einstellung jedes Mal.

    – Abhishek

    18. Juni 2018 um 10:36 Uhr

1454370cookie-checkWie kann ich „public/index.php“ in der generierten Laravel-URL entfernen? [duplicate]

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

Privacy policy