wake-up-neo.com

Meine Routen geben eine 404 zurück. Wie kann ich sie reparieren?

Ich habe gerade angefangen, das Laravel-Framework zu lernen, und ich habe ein Problem mit dem Routing.

Die einzige Route, die funktioniert, ist die Standardroute, die standardmäßig mit Laravel verbunden ist.

Ich verwende WAMP unter Windows und es verwendet PHP 5.4.3 und Apache 2.2.22. Außerdem habe ich mod_rewrite aktiviert und die 'index.php' aus der Konfigurationsdatei application.php zum Verlassen entfernt eine leere Zeichenfolge.

Ich habe einen neuen Controller mit dem Namen User : erstellt.

class User_Controller extends Base_Controller {

    public $restful = true;

    public function get_index() 
    {
        return View::make('user.index');
    }
}

Ich habe eine Ansichtsdatei in application/views/user/namens index.php mit einfachem HTML-Code erstellt und in routes.php Folgendes hinzugefügt:

Route::get('/', function () {
    return View::make('home.index');
});

Route::get('user', function () {
    return View::make('user.index');
});

Die erste Route funktioniert gut, wenn Sie das Stammverzeichnis (http://localhost/mysite/public) in meinem Webbrowser aufrufen. Wenn ich jedoch mit http://localhost/mysite/public/user auf die zweite Route gehe, wird der Fehler 404 Not Found angezeigt. Warum sollte das passieren?

64
JasonMortonNZ

Haben Sie versucht, dies zu Ihrer Routendatei hinzuzufügen Route::get('user', "[email protected]")?

Der Text vor dem @, user, leitet in diesem Fall die Seite an die Benutzersteuerung und der Text nach dem @, index, leitet das Skript an die user-Funktion public function get_index().

Wie Sie sehen, verwenden Sie $restful. In diesem Fall könnten Sie Ihre Route auf Route::any('user', '[email protected]') setzen. Dies behandelt sowohl POST als auch GET, anstatt beide separat auszugeben. 

22
PapaSmurf

Bei meiner Ubuntu LAMP-Installation habe ich dieses Problem mit den folgenden 2 Änderungen gelöst.

  1. Aktivieren Sie mod_rewrite auf dem Apache-Server: Sudo a2enmod rewrite.
  2. Bearbeiten Sie /etc/Apache2/Apache2.conf und ändern Sie die "AllowOverride" -Direktive für das Verzeichnis/var/www (das mein Hauptverzeichnis für Dokumente ist): AllowOverride All

Starten Sie anschließend den Apache-Server neu: service Apache2 restart

85
Andrew Vickers

Klicken Sie mit WAMP auf das Wamp-Symbol -> Apache-> Apache-Module -> Scrollen und überprüfen Sie das Modul rewrite_

Beachten Sie, dass die Serveranwendung automatisch neu gestartet wird, sobald Sie "rewrite_module" aktivieren.

63
Mario Uvera

Haben Sie versucht zu überprüfen, ob 

http://localhost/mysite/public/index.php/user 

arbeitete? Wenn ja, stellen Sie sicher, dass alle Ordner Ihres Pfads keine Großbuchstaben haben. Ich hatte die gleiche Situation und es half, Buchstaben in Kleinbuchstaben umzuwandeln.

29
user1930566

Ich habe das gleiche Problem mit EasyPHP bekommen. Ich habe festgestellt, dass ich AllowOverride All in meinem <Directory>-Block in httpd.conf angeben musste. Andernfalls ignoriert Apache manchmal Ihren .htaccess.

Meines sah so aus ...

<Directory "D:/Dev">
    Options FollowSymLinks Indexes
    #### NEXT IS THE CRUCIAL LINE ####
    AllowOverride All                  
    Order deny,allow
    Allow from 127.0.0.1
    Deny from all
    Require all granted     
</Directory>
6
Simon East

Sie könnten versuchen, root/public/.htaccess nach root/.htaccess zu verschieben, und es sollte funktionieren

6
Wasim A.

Routen

Verwenden Sie sie, um bestimmte Routen zu definieren, die nicht von Controllern verwaltet werden.

Controller

Verwenden Sie sie, wenn Sie die traditionelle MVC-Architektur verwenden möchten

Lösung für Ihr Problem

Sie registrieren Controller nicht als Routen, es sei denn, Sie möchten eine bestimmte "benannte" Route für eine Controlleraktion.

Anstatt eine Route für die Controller-Aktionen zu erstellen, registrieren Sie einfach Ihren Controller:

Route::controller('user');

Jetzt ist Ihr Controller registriert, Sie können zu http://localhost/mysite/public/user navigieren und Ihr get_index wird ausgeführt.

Sie können auch alle Controller auf einmal registrieren:

Route::controller(Controller::detect());
5
David Barker

Vergessen Sie nicht die "RewriteBase" in Ihrem public/.htaccess:

Zum Beispiel :

Options +FollowSymLinks
RewriteEngine On
RewriteBase /your/folder/public
3
Mathieu Perino

OK, also nachdem ich mich über einen Tag lang mit diesem Problem beschäftigt hatte ... Ich stand auf und tat, was ich gestern tun sollte, und entlarvte, was los war!

Was Laravel hier versucht, ist das Einfügen der Datei index.php direkt vor dem als Route angegebenen Pfad. SO zum Beispiel, wenn Sie einen Route::get('/account/create', ..., angegeben haben und Ihre App von beispielsweise localhost/laravel/authenticate/public/account/create in Ihrem Browser ausführen, möchte laravel localhost/authenticate/public/index.php/account/create ausführen, aber dazu muss Apache diese Anforderungen über /wamp/www/laravel/laravel/authentication/public (Ihren Pfad) sehen kann etwas variieren, abhängig davon, wo Ihre Laravel-App tatsächlich installiert ist, aber die nachfolgende public ist der Ort, an dem die Ersetzung erfolgen muss. Es muss eine 'RewriteRule' angewendet werden.

Zum Glück liefert laravel die richtige Rewrite-Regel in einer praktischen .htaccess-Datei direkt im public-Ordner Ihrer App. Das Problem ist, dass der Code in dieser '.htaccess'-Datei nicht so funktioniert, wie WAMP standardmäßig konfiguriert ist. Der Grund dafür, dass dieses SEEMS das von muvera am Anfang dieses Threads vorgeschlagene Problem ist - der rewrite_module-Code muss von Apache geladen werden, bevor der RewriteRule-Zeiger funktioniert. Heck macht das Sinn.

Der Teil, der NICHT Sinn macht: einfach stopping und restarting Apache-Services werden nicht die notwendigen Änderungen vornehmen, damit WAMP mit Ihrer RewriteRule das Richtige tut.

Was funktioniert: Nehmen Sie die von muvera vorgeschlagenen Änderungen vor (siehe Anfang des Threads), um die richtigen Module zu laden. Setzen Sie anschließend Ihre gesamte Windows-Sitzung zurück, und entladen Sie Apache damit vollständig aus dem Speicher. Starten Sie WAMP und VOILA neu! Wenn der Fix funktioniert, wird die korrekte RewriteRule angewendet, Yada, Yada; Ich lebe glücklich bis heute.

Die gute Nachricht aus all dem: Ich weiß jetzt viel mehr über .htaccess, RewriteRule und httpd.conf-Dateien. Es gibt ein gutes Argument (Leistung), um die Logik aus der public.htaccess-Datei Ihrer App zu verschieben und sie in einen Directory ...-Abschnitt Ihrer httpd.conf in Ihrem Apache-Ordner 'bin' BTW zu legen (insbesondere, wenn Sie Zugriff auf diesen Ordner haben).

3
mdg

Wenn Sie Vagrant über Homestead verwenden, ist möglicherweise ein Fehler beim Laden des freigegebenen Ordners aufgetreten. Es sieht so aus, als würde Vagrant Ihre Dateien aus diesem Ordner entnehmen und die Dateien auslagern, die sich beim Booten tatsächlich auf dem Host-Computer befinden. Wenn also ein Fehler aufgetreten ist, versuchen Sie im Wesentlichen, auf Ihre Laravel-Installation zuzugreifen, wenn Sie sie erstellt haben Deshalb bekommen Sie nur "nach Hause" - das wurde während der Installation generiert. 

Sie können dies leicht überprüfen, indem Sie in Ihre virtuelle Maschine wechseln und in der Datei routes/web.php nachsehen, ob es sich tatsächlich um Ihre Datei handelt. Ist dies nicht der Fall, beenden Sie out und vagrant halt, vagrant up und suchen Sie nach Fehlern beim Booten. 

0

sie müssen Laravel 5 den Befehl verwenden

  class User_Controller extends Controller {
  public $restful = true;
  public function get_index(){
  return View('user.index');
  }
  }

und in routen.php

  Route::get('/', function()
  {
  return view('home.index');
  });

  Route::get('user', function()
  {
  return view('user.index');
  });

Laravel 5 Befehlsänderungen für Ansicht und Controller finden Sie in der Dokumentation, in der ich denselben Fehler hatte

0
Rohan Kalra

Führen Sie einfach Ihr Terminal aus.

 composer dump-autoload
0
Bakhtawar GIll

Das Hauptproblem, dass die Route nicht funktioniert, ist das Modul mod_rewrite.so in macos. Linux ist in der Datei httpd.conf der Apache-Konfiguration nicht aktiviert. 

LoadModule rewrite_module libexec/Apache2/mod_rewrite.so

Entfernen Sie das # von der obigen Zeile httpdf.conf. Dann wird es funktionieren. genießen!

0
Pramod yadav

Aktivieren Sie kurze php-Tags in Ihrer php.ini. WAMP hat sie normalerweise aus und Laravel braucht sie an.

0
dajavax
Route::get('/', function()
{
return View::make('home.index');
});

Route::get('user', function()
{
return View::make('user.index');
});

oben ändern zu 

Route::get('user', function()
{
return View::make('user.index');
});

Route::get('/', function()
{
return View::make('home.index');
});

Sie müssen am Ende in Ihren Routen '/' (home/default) verwenden

0
athula

Ich denke, Sie haben die Standard-.htaccess-Datei im öffentlichen Laravel-Ordner gelöscht. Laden Sie die Datei hoch, um das Problem zu beheben.

0
jewelhuq

die einfachen Befehle mit automatischem Laden der Abhängigkeiten

composer dump-autoload

und immer noch erhalten, dass einige wichtige Dateien fehlen, also sehen Sie hier den gesamten Vorgang

https://codingexpertise.blogspot.com/2018/11/laravel-new.html

0
user10730910