Ich habe gerade angefangen, das Laravel-Framework zu lernen, und ich habe ein Problem mit dem Routing.
Die einzige Route, die funktioniert, ist die Standard-Heimroute, die standardmäßig an Laravel angehängt 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 Datei 'index.php' aus der Konfigurationsdatei application.php entfernt, um eine leere Zeichenfolge zu hinterlassen.
Ich habe einen neuen Controller namens User erstellt :
class User_Controller extends Base_Controller {
public $restful = true;
public function get_index()
{
return View::make('user.index');
}
}
Ich habe in application / views / user / eine Ansichtsdatei mit dem Namen index.php mit einem grundlegenden HTML-Code erstellt und in route.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 einwandfrei, wenn Sie root ( http://localhost/mysite/public
) in meinem Webbrowser besuchen. Wenn ich jedoch versuche, mit zu meiner zweiten Route zu http://localhost/mysite/public/user
wechseln, wird der Fehler 404 Not Found angezeigt. Warum sollte das passieren?
Antworten:
Haben Sie versucht, dies stattdessen zu Ihrer Routendatei hinzuzufügen
Route::get('user', "user@index")
?Das Stück Text vor dem
@
,user
in diesem Fall wird die Seite an die Benutzer - Controller und das Stück Text nach dem direkten@
,index
wird das Skript an die direkteuser
Funktionpublic function get_index()
.Ich sehe , Sie verwenden
$restful
, in dem Fall , dass Sie Ihre einstellen könnteRoute
zuRoute::any('user', 'user@index')
. Dies behandelt beidePOST
undGET
anstatt beide separat zu schreiben.quelle
Bei meiner Ubuntu LAMP-Installation habe ich dieses Problem mit den folgenden 2 Änderungen gelöst.
sudo a2enmod rewrite
.AllowOverride All
Starten Sie dann den Apache-Server neu:
service apache2 restart
quelle
Klicken Sie mit WAMP auf das Wamp-Symbol -> Apache-> Apache-Module-> Scrollen und aktivieren Sie rewrite_module. Starten Sie ein LoadModule rewrite_module neu
Beachten Sie, dass die Serveranwendung automatisch für Sie neu gestartet wird, sobald Sie "rewrite_module" aktivieren.
quelle
sudo a2enmod rewrite
nach diesem Neustartsudo service apache2 restart
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 enthalten. Ich hatte die gleiche Situation und das Konvertieren von Buchstaben in Kleinbuchstaben half.
quelle
api/branches
funktionierte der Aufruf unter Windows , aber unter Linux musste ich diese URL wieindex.php/api/branches
folgt ändern: Gibt es eine Möglichkeit, dies zu beheben, um dieselben URLs zu haben?http://localhost/mysite/user
Ich hatte das gleiche Problem mit EasyPHP. Gefunden, dass ich
AllowOverride All
in meinem<Directory>
Block in angeben musstehttpd.conf
. Ohne dies ignoriert Apache manchmal Ihre.htaccess
.Meins 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>
quelle
Sie könnten versuchen, sich zu bewegen
root/public/.htaccess
,root/.htaccess
und es sollte funktionierenquelle
Routen
Verwenden Sie diese, 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 Controller-Aktion.
Anstatt eine Route für die Aktionen Ihres Controllers zu erstellen, registrieren Sie einfach Ihren Controller:
Route::controller('user');
Nachdem Ihr Controller registriert ist, können Sie zu navigieren
http://localhost/mysite/public/user
und Ihr Controller wirdget_index
ausgeführt.Sie können auch alle Controller auf einmal registrieren:
quelle
Vergessen Sie nicht das "
RewriteBase
" in Ihrempublic/.htaccess
:Zum Beispiel :
Options +FollowSymLinks RewriteEngine On RewriteBase /your/folder/public
quelle
OK, nachdem ich mich etwas mehr als einen Tag lang mit diesem Problem beschäftigt hatte ... stand ich auf und tat, was ich gestern hätte tun sollen, und entlarvte, was los war!
Was Laravel hier VERSUCHT, ist, die Datei
index.php
direkt vor dem als Route angegebenen Pfad einzufügen . Wenn Sie beispielsweise a angegebenRoute::get('/account/create', ...,
und Ihre App beispielsweiselocalhost/laravel/authenticate/public/account/create
in Ihrem Browser ausgeführt haben, möchte laravel sie ausführenlocalhost/authenticate/public/index.php/account/create
, aber um dies zu tun ... Apache muss diese Anforderungen durchsehen/wamp/www/laravel/laravel/authentication/public
(Ihr Pfad kann je nach Standort etwas variieren Die Laravel-App ist tatsächlich installiert, aber im Trailing musspublic
die Ersetzung stattfinden. Es muss eine 'RewriteRule' angewendet werden.Zum Glück liefert Laravel die richtige Rewrite-Regel in einer praktischen
.htaccess
Datei direkt impublic
Ordner Ihrer App . Das PROBLEM ist, dass der Code in dieser '.htaccess'-Datei nicht mit der Art und Weise funktioniert, wie WAMP standardmäßig konfiguriert ist. Der Grund für dieses SEEMS ist das von muvera oben in diesem Thread vorgeschlagene Problem - der Code rewrite_module muss von Apache geladen werden, bevor dasRewriteRule
Zeug funktioniert. Das macht doch Sinn.Der Teil, der keinen Sinn ergibt: Einfach
stopping
undrestarting
Apache-Dienste werden nicht die Änderungen übernehmen, die erforderlich sind, damit WAMP mit Ihrer RewriteRule das Richtige tut - ich weiß, ich habe es viele Male versucht!Was funktioniert: Nehmen Sie die von muvera vorgeschlagenen Änderungen vor (siehe oben im Thread), um die richtigen Module zu laden. Setzen Sie dann Ihre gesamte Windows-Sitzung zurück, sodass Apache nicht mehr über genügend Arbeitsspeicher verfügt. Starten Sie WAMP und VOILA neu (laden Sie es neu)! das Update funktioniert, die richtige RewriteRule wird angewendet, yada, yada; Ich lebe glücklich bis ans Ende meiner Tage.
Die gute Nachricht aus all dies: Ich weiß viel mehr über
.htaccess
,RewriteRule
undhttpd.conf
Dateien jetzt. Es gibt ein gutes (Leistungs-) Argument, um die Logik aus derpublic
.htaccess
Datei Ihrer App zu verschieben und sie in einenDirectory ...
Abschnitt Ihrer httpd.conf in Ihrem Apache-Ordner 'bin' zu legen (insbesondere, wenn Sie Zugriff auf diesen Ordner haben).quelle
Versuchen Sie, kurze PHP-Tags in Ihrer php.ini zu aktivieren. WAMP hat sie normalerweise ausgeschaltet und Laravel braucht sie an.
quelle
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 '/' (home / default) am Ende Ihrer Routen verwenden
quelle
Sie müssen den Befehl Laravel 5 verwenden
class User_Controller extends Controller { public $restful = true; public function get_index(){ return View('user.index'); } }
und in route.php
Route::get('/', function() { return view('home.index'); }); Route::get('user', function() { return view('user.index'); });
Änderungen des Laravel 5-Befehls für Ansicht und Controller finden Sie in der Dokumentation, in der ich zuvor denselben Fehler hatte
quelle
Laufen Sie einfach in Ihrem Terminal.
quelle
Ich denke, Sie haben die Standard-.htaccess-Datei im öffentlichen Ordner von laravel gelöscht. Laden Sie die Datei hoch, mit der Ihr Problem behoben werden soll.
quelle
Die einfachen Befehle mit automatischem Laden laden die Abhängigkeiten
und immer noch zu sehen, dass einige wichtige Dateien fehlen, gehen Sie hier, um den gesamten Vorgang zu sehen
https://codingexpertise.blogspot.com/2018/11/laravel-new.html
quelle
Wenn Sie Vagrant über Homestead verwenden, ist möglicherweise ein Fehler beim Mounten des freigegebenen Ordners aufgetreten. Es sieht so aus, als würde Vagrant Ihre Dateien aus diesem Ordner entnehmen und die Dateien, die sich beim Booten tatsächlich auf dem Host-Computer befinden, austauschen. Wenn also ein Fehler aufgetreten ist, versuchen Sie im Wesentlichen, von Anfang an auf Ihre Laravel-Installation zuzugreifen (welche) Deshalb kommen Sie nur "nach Hause" (das wurde während der Installation generiert).
Sie können dies einfach überprüfen, indem Sie in Ihre VM sshen und die Datei route / web.php überprüfen, um festzustellen, ob es sich tatsächlich um Ihre Datei handelt. Wenn dies nicht der Fall, verlassen und
vagrant halt
,vagrant up
und suchen Fehler beim Booten.quelle
index.html
.htaccess
sudo service apache2 restart
höchstwahrscheinlich liegt es an Cache-Problemen
quelle
Das Hauptproblem bei nicht funktionierenden Routen besteht darin, dass in macos das Modul mod_rewrite.so vorhanden ist und Linux in der Datei httpd.conf der Apache-Konfiguration nicht aktiviert ist, sodass .htaccess funktionieren kann. Ich habe dies gelöst, indem ich die Zeile auskommentierte:
# LoadModule rewrite_module libexec/apache2/mod_rewrite.so
Entfernen Sie die
#
von oben stehende Linie vonhttpdf.conf
. Dann wird es funktionieren.genießen!
quelle