Meine Routen geben einen 404 zurück, wie kann ich sie beheben?
Lesezeit: 5 Minuten
JasonMortonNZ
Ich habe gerade angefangen, das Laravel-Framework zu lernen, und ich habe ein Problem mit dem Routing.
Die einzige Route, die funktioniert, ist die standardmäßige Home-Route, die standardmäßig mit Laravel verbunden ist.
Ich verwende WAMP unter Windows und es verwendet PHP 5.4.3 und Apache 2.2.22, und ich habe auch mod_rewrite aktiviert und habe „index.php“ aus der Konfigurationsdatei „application.php“ entfernt, um eine leere Zeichenfolge zu hinterlassen.
Ich habe einen neuen Controller namens erstellt Benutzer:
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/ aufgerufen index.php mit etwas grundlegendem HTML-Code, und in routes.php habe ich Folgendes hinzugefügt:
Route::get("https://stackoverflow.com/", function () {
return View::make('home.index');
});
Route::get('user', function () {
return View::make('user.index');
});
Die erste Route funktioniert gut beim Besuch des Stammverzeichnisses (http://localhost/mysite/public) in meinem Webbrowser, aber wenn ich versuche, zu meiner zweiten Route mit zu gehen http://localhost/mysite/public/user Ich erhalte einen 404 Not Found-Fehler. Warum sollte das passieren?
Die .htaccess ist unverändert, so wie sie im Auslieferungszustand war.
– JasonMortonNZ
3. August 2012 um 7:51 Uhr
Es scheint, dass WAMP das Problem war. Habe jetzt auf XAMPP umgestellt und alles funktioniert super und so wie es soll. Soll ich diese Frage selbst beantworten und erklären, dass WAMP das Problem war?
– JasonMortonNZ
4. August 2012 um 2:48 Uhr
@AquilaSolutions Ja, das darfst du. So wird jeder deutlich sehen, dass Ihr Problem jetzt gelöst ist.
– Jocelyn
30. September 2012 um 0:56 Uhr
Andreas Vickers
Bei meiner Ubuntu LAMP-Installation habe ich dieses Problem mit den folgenden 2 Änderungen gelöst.
Aktivieren Sie mod_rewrite auf dem Apache-Server: sudo a2enmod rewrite.
Bearbeiten /etc/apache2/apache2.confÄndern der “AllowOverride”-Direktive für das /var/www-Verzeichnis (das mein Hauptdokumentstammverzeichnis ist): AllowOverride All
Starten Sie dann den Apache-Server neu: service apache2 restart
Dies hat dieses Problem für mich auf einem vagabundierenden Computer behoben, der von Puphpet heruntergeladen wurde.
– Augenzwinkern
4. Februar 2015 um 22:08 Uhr
Danke, Sie sind Lebensretter.
– Hassan Murtaza
30. Mai 2015 um 15:12 Uhr
Vielen Dank, ich habe meine 4 Stunden verschwendet, um das zu finden
– Anshul Mishra
18. August 2015 um 10:04 Uhr
Hat bei mir unter MacOS High Sierra 10.13.3 mit Laravel-5.4 funktioniert
– Jewgenij Afanasjew
5. März 2018 um 4:30 Uhr
@McSonk, wahrscheinlich ist die Frage für Windows. Diese alternative Lösung funktioniert für Ubuntu. Danke Alter.
– Fendi Septiawan
11. Juli 2018 um 3:31 Uhr
Mario Uvera
Verwenden WAMP klicke auf wamp icon ->apache->apache modules->scroll und prüfe rewrite_module.
Starten Sie ein LoadModule rewrite_module neu
Hinweis: Die Serveranwendung wird automatisch neu gestartet, sobald Sie “rewrite_module” aktivieren.
VIELEN DANK, ich versuche seit gestern, dieses Problem zu lösen
– Moe
24. November 2013 um 12:29 Uhr
Dies scheint mir jedes Mal zu passieren, wenn ich WAMP und Laravel auf einem Computer installiere/neu installiere. Das ist immer das Problem. Hoffentlich wird es endlich in Erinnerung bleiben 😉
– Kennmore
13. Dezember 2013 um 7:53 Uhr
Unter Ubuntu 14.04 funktionierte ‘sudo a2enmod rewrite’ und dann ‘sudo service apache2 restart’.
– nsp
24. September 2014 um 8:54 Uhr
Aktivieren Sie für Linux-Systeme das Rewrite-Modul sudo a2enmod rewrite danach Neustart sudo service apache2 restart
– ziel mich
19. Juli 2016 um 19:53 Uhr
Haben Sie versucht zu überprüfen, ob
http://localhost/mysite/public/index.php/user
arbeitete? Wenn dies der Fall ist, stellen Sie sicher, dass alle Ordner Ihres Pfads keine Großbuchstaben enthalten. Ich hatte die gleiche Situation und es hat geholfen, Buchstaben in Kleinbuchstaben umzuwandeln.
Vielen Dank. Ich gehe das Laravel-Buch (Laravel Starter) Schritt für Schritt durch und bin beim Routing bis zum Abschluss (Seite 13) hängen geblieben. Dies hat dieses Problem für mich gelöst.
– Steve Lindsey
5. Februar 2013 um 19:33 Uhr
Dies löste mein Problem. Ich hatte eine .htaccess im Stammverzeichnis meines Apache-Ordners, die Laravels htaccess beschädigte.
– Maarten00
11. Dezember 2013 um 10:51 Uhr
Dies löste ein anderes Problem, das ich hatte. Verwenden Sie Laravel zum Generieren von Seiten und Angular zum Aufrufen von REST, unter Windows den Aufruf an api/branches funktionierte, aber unter Linux musste ich diese URL wie folgt ändern: index.php/api/branches Gibt es eine Möglichkeit, dies zu lösen, um dieselben URLs zu haben?
– Miroslavigne
23. September 2015 um 9:57 Uhr
Ich hätte nie gedacht, dass es zwischen Groß- und Kleinschreibung unterscheidet
– Lösche beide
23. Mai 2017 um 5:35 Uhr
Platzieren Sie stattdessen die .htaccess-Datei aus dem Ordner public/ im Stammverzeichnis des Projekts, dann können Sie darauf zugreifen http://localhost/mysite/user
– Rohan Khude
10. Januar 2018 um 9:56 Uhr
Papa Schlumpf
Haben Sie versucht, dies stattdessen zu Ihrer Routendatei hinzuzufügen Route::get('user', "user@index")?
Das Textstück vor dem @, user In diesem Fall wird die Seite an den Benutzercontroller und den Text nach dem weitergeleitet @, indexleitet das Skript an die user Funktion public function get_index().
Ich sehe, Sie verwenden $restfulin diesem Fall könnten Sie Ihre festlegen Route zu Route::any('user', 'user@index'). Dies wird beides bewältigen POST und GETanstatt sie beide separat auszuschreiben.
Ich hatte das gleiche Problem mit EasyPHP. Gefunden, dass ich angeben musste AllowOverride All in meinem <Directory> einsperren httpd.conf. Ohne dies ignoriert Apache manchmal Ihre .htaccess.
Meine sah am Ende 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>
Ich habe auf Debian GNU/Linux 7.6 festgestellt, dass diese Antwort einen Teil dessen lieferte, was erforderlich war, zusätzlich zur Aktivierung des Moduls für Apache2 (a2enmod rewrite).
– Kevin Buchs
8. September 2014 um 19:16 Uhr
David Arenburg
Du könntest versuchen, dich zu bewegen root/public/.htaccess zu root/.htaccess und es sollte funktionieren
Ich habe auf Debian GNU/Linux 7.6 festgestellt, dass diese Antwort einen Teil dessen lieferte, was erforderlich war, zusätzlich zur Aktivierung des Moduls für Apache2 (a2enmod rewrite).
– Kevin Buchs
8. September 2014 um 19:16 Uhr
David Bärker
Routen
Verwenden Sie sie, um bestimmte Routen zu definieren, die nicht von Controllern verwaltet werden.
Controller
Verwenden Sie sie, wenn Sie die herkömmliche 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 Controller-Aktion.
Anstatt eine Route für die Aktionen Ihres Controllers zu erstellen, registrieren Sie einfach Ihren Controller:
Route::controller('user');
Jetzt ist Ihr Controller registriert, Sie können zu navigieren http://localhost/mysite/public/user und dein get_index wird ausgeführt.
Sie können auch alle Controller auf einmal registrieren:
Route::controller(Controller::detect());
13529400cookie-checkMeine Routen geben einen 404 zurück, wie kann ich sie beheben?yes
Die .htaccess ist unverändert, so wie sie im Auslieferungszustand war.
– JasonMortonNZ
3. August 2012 um 7:51 Uhr
Es scheint, dass WAMP das Problem war. Habe jetzt auf XAMPP umgestellt und alles funktioniert super und so wie es soll. Soll ich diese Frage selbst beantworten und erklären, dass WAMP das Problem war?
– JasonMortonNZ
4. August 2012 um 2:48 Uhr
@AquilaSolutions Ja, das darfst du. So wird jeder deutlich sehen, dass Ihr Problem jetzt gelöst ist.
– Jocelyn
30. September 2012 um 0:56 Uhr