it-swarm.com.de

Laravel 4 Alle Routen außer Home führen zu 404-Fehlern

Ich habe Laravel 4 mit Composer installiert und auch einen virtuellen Host eingerichtet. Derzeit funktioniert nur die Wurzelroute:

<?php

Route::get('/', function()
{
    return View::make('hello');
});

Das ist nicht:

Route::get('/hello', function()
{
    return View::make('hello');
});

Was ich versuche zu treffen, ist TasksController bei /tasks:

Route::resource('tasks', 'TasksController');

Dies gibt mir auch 404 Fehler. Was könnte ich falsch machen? Ich habe eine .htaccess-Standarddatei im Stammverzeichnis meines Projekts:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Ich verwende localhost auf einem Mac.

54
Amit Erandole

Nur zum Lachen, ob /index.php/hello funktioniert.

Wenn ja, handelt es sich höchstwahrscheinlich um ein .htaccess-Problem.

101
GaryJ

Hatte das gleiche Problem mit Laravel 4 unter WAMP (Windows 8).
Die Lösung, die für mich funktionierte, war:

  1. Öffnen Sie Apache httpd.conf und suchen Sie nach dieser Zeile:

    #LoadModule rewrite_module modules/mod_rewrite.so
    
  2. Kommentar auskommentieren (# entfernen)
  3. httpd.conf speichern
  4. Starten Sie WAMP erneut

Es sollte funktionieren!

38
Rutger

Ich hatte das gleiche Problem und die Lösung bestand darin, den Umschreibmodus auf Apache2 zu aktivieren

Verwenden Sie in einem Terminal die folgenden Befehle:

$ Sudo a2enmod rewrite
$ Sudo service Apache2 restart

Und magie! 

27
manujas

Hatte genau das gleiche Problem.

Zwei Dinge, die ich tun musste, um das zu beheben:

  1. aktivieren Sie rewrite_module in Apache 
  2. Ändern Sie das AllowOverride von None in All , Beispiel (Apache 2.4.9):

    Optionsindizes FollowSymLinks MultiViews AllowOverride All Erfordert alle gewährten

Zu Ihrer Information: Verwenden Sie Laravel Homestead zusammen mit VirtualBox und Vagrant anstelle von WAMP. Es enthält Nginx anstelle von Apache, aber alles funktioniert standardmäßig, da es explizit für Laravel konfiguriert ist. 

13
Orhan

Selbst nach dem Aktivieren von mod_rewrite kann dieses Problem auftreten, wenn Sie Ihren Ordner "laravel/public" veredeln.

Hinzufügen 

RewriteBase /your_Apache_alias

.htaccess macht den Trick.

9
MartinGomez

Sie brauchen kein /, wenn Sie etwas anderes als Zuhause definieren:

Route::get('hello', function()
{
    return View::make('hello');
});

Sollte arbeiten.

6
davzie

Da Laravel 4 Dateien automatisch aus einer Map in eine statische Datei lädt, müssen Sie diese Datei aktualisieren, wenn Sie einen neuen Controller hinzufügen. Führen Sie diesen Befehl aus, um die statische Datei neu zu erstellen:

php composer.phar dump-autoload
4
Niklas Modess

FÜR UBUNTU USERS - getestet für Ubuntu 18.04

1- Aktivieren Sie das Mod-Überschreiben

Sudo a2enmod rewrite

2- Ändern Sie AllowOverride in der Apache-Conf-Datei:

Sudo nano /etc/Apache2/Apache2.conf

Ändern Sie in diesem Block AllowOverride von None in All

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

3- Starten Sie Apache neu

Sudo service Apache2 restart
4
BassMHL

Es ist ziemlich klar, dass das Problem auf "mod_rewrite" zurückzuführen ist. In einigen Fällen reicht es aus, dieses Modul in Apache zu aktivieren, um es zu beheben.

In meinem Fall musste ich jedoch die Konfiguration für den VirtualHost folgendermaßen erweitern:

<VirtualHost *:80>

    ServerName adplus.local

    ServerAdmin [email protected]
    DocumentRoot /var/www/adplus.local/project/public

    **<Directory "/var/www/adplus.local/project/public">
        AllowOverride All
    </Directory>**

    ErrorLog ${Apache_LOG_DIR}/error.log
    CustomLog ${Apache_LOG_DIR}/access.log combined
</VirtualHost>
3

Ich habe das alles ohne Erfolg ausprobiert, dann habe ich einen anderen Beitrag gefunden und meinen .htaccess geändert:

<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ /index.php [L]
</IfModule>
3
Dylan Glockler

Ich hatte dieses Problem (unter Windows mit manuell installiertem Apache 2.2), und die Ursache war eine fehlende AllowOverride in meinem VirtualHost, da das Stammverzeichnis in httpd.conf auf None festgelegt war.

FileInfo Options=MultiViews ist das minimale Set, das Sie für Laraves .htaccess benötigen

z.B. 

<VirtualHost *:80>
    DocumentRoot "C:/htdocs/domain.com/laravel/public"
    ServerName foo.domain.com

    <Directory "C:/htdocs/domain.com/laravel/public">
        AllowOverride FileInfo Options=MultiViews
    </Directory>
</VirtualHost>

Oder verwenden Sie AllowOverride All, wenn dies nicht funktioniert und Sie sich nicht für die Sicherheit interessieren.

3
scipilot

In einer vorherigen Antwort gab es einen kleinen Fehler. Dies könnte helfen.

$ Sudo a2enmod rewrite
$ Sudo service Apache2 restart

Ich hoffe es tut.

3
Caleb Mbakwe

Es ist wie @GaryJ & @MartinGomez gesagt. Dies ist der Inhalt von .htaccess , der für alle Ihre Laravel 4-Projekte auf dem Apache-Server im Ordner public festgelegt werden sollte:

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

    RewriteEngine On
    RewriteBase /

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

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
2
Heroselohim

Gehe zu 

nano/etc/nginx/sites-available/yoursite

finde try_file und ersetze es wie folgt:

try_files $uri $uri/ /index.php?$query_string;

2
Murali Krishna

Ich hatte ein ähnliches Problem auf Ubuntu 14.04 mit Lumen 5.4.

Die Lösung bestand aus zwei Teilen für mich. Zuerst musste ich in meiner vhost-Datei /etc/Apache2/sites-enabled/my_vhost.conf den folgenden <Directory>-Eintrag hinzufügen, um Überschreibungen zuzulassen, nachdem ich meine DocumentRoot deklariert hatte:

    DocumentRoot /var/www/path/to/my/app/public

    <Directory "/var/www/path/to/my/app/public">
            Options FollowSymLinks
            AllowOverride All

            Order allow,deny
            Allow from all
    </Directory>

Als nächstes musste ich das Umschreiben mit aktivieren:

Sudo a2enmod rewrite
Sudo service Apache2 restart
1
Kimberly W

Für Nginx-Benutzer haben Sie wahrscheinlich den virtuellen Host default kopiert. Laravel erfordert jedoch einige Anpassungen der location-Direktive, damit die Laravel-Anwendung das Routing und nicht Nginx ausführen kann.

Ersetzen Sie in Ihrem /etc/nginx/sites-available/your-site-name die Standortanweisung durch Folgendes:

location / {
    try_files $uri $uri/ /index.php$is_args$args;
}

Führen Sie dann Sudo service nginx reload aus, damit die Änderungen wirksam werden. 

1
Dylan Pierce

Dieser Kommentar kann etwas spät sein, kann aber helfen. Ich hatte das gleiche Problem beim Weiterleiten zu einer anderen Ansicht wie dieser:

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

Route::get('login', function () {
return view('login');
});

Aber es hat nicht funktioniert, also habe ich alles versucht, was ich in allen verwandten Beiträgen gefunden habe, aber nicht genug, um mein Problem zu lösen. Ich fand diese Zeilen in der httpd.conf:

<Files ".ht*">
Require all denied
</Files>

Also habe ich "abgelehnt" in "gewährt" geändert und diese Zeile zu meinem .htaccess kommentiert:

#RewriteBase /

Und gearbeitet !! Ich denke, dass diese Zeilen dazu führen, dass Apache die .htaccess-Datei Ihres Projekts nicht berücksichtigt, so dass die Umstellung auf selbstverständlich den Unterschied auslöste.

Arbeiten mit Apache Server 2 @ Manjaro Linux (basierend auf Archlinux)

0
Luis Torres

Dieses Update hat für mich funktioniert. Fügen Sie in der .htaccess-Datei einfach die folgenden hinzu, nachdem die Rewriterules aktiviert wurden.

Options -Indexes
Options +FollowSymLinks

Arbeitete wie Charme

0
creationproject