wake-up-neo.net

Wie kann ich das beheben? Laravel 5.1 - 404 Nicht gefunden?

Ich versuche zum ersten Mal, Laravel 5.1 zu verwenden. Ich konnte es installieren und https://sub.example.com/laravel/public/ zeigt an, was sein soll. Von mir erstellte Ansichten zeigen jedoch eine 404-Fehlerseite an, die nicht gefunden wurde.

Folgendes habe ich bisher getan:

Ich habe einen Controller in laravel\app\Http\controllers\Authors.php erstellt

Hier ist der Code hinter der Datei Authors.php

<?php

class Authors_Controller extends Base_Controller {

    public $restful = true;

    public function get_index() {
        return View::make('authors.index')
            ->with('title', 'Authors and Books')
            ->with('authors', Author::order_by('name')->get());
    }
}

Dann habe ich eine Ansicht in laravel\resources\views\Authors\index.blade.php erstellt

Hier ist der Code hinter der Datei index.blade.php

@layout('layouts.default')


@section('content')
    Hello, this is a test
@endsection

Dann habe ich ein Layout in laravel\resources\views\layouts\default.blade.php erstellt

Hier ist der Code hinter der Datei default.blade.php

<!DOCTYPE html>
<html>
    <head>
        <title>{{ $title }}</title>
    </head>
    <body>

    @if(Session::has('message'))
        <p style="color: green;">{{ Session::get('message') }}</p>
    @endif

    @yield('content')
    Hello - My first test
    </body>
</html>

Schließlich habe ich eine Route in laravel\app\Http\routes.php erstellt

<?php
Route::get('/', function () {
    return view('welcome');
});

Route::get('authors', array('as'=>'authors', 'uses'=>'[email protected]'));

Aber aus irgendeinem Grund bekomme ich immer wieder die 404-Fehlerseite nicht gefunden.

Ich habe den mod_rewrite auf meinem Apache 2.4.9 aktiviert, indem ich die Zeile auskommentiert habe

LoadModule rewrite_module modules/mod_rewrite.so

Dann startete Apache neu.

Nach allem, was ich in der Ausgabe von php_info() sehen kann, ist der mod_rewrite aktiviert

Loaded Modules 
core mod_win32 mpm_winnt http_core mod_so mod_php5 mod_access_compat mod_actions mod_alias mod_allowmethods mod_asis mod_auth_basic mod_authn_core mod_authn_file mod_authz_core mod_authz_groupfile mod_authz_Host mod_authz_user mod_autoindex mod_cgi mod_dir mod_env mod_include mod_isapi mod_log_config mod_mime mod_negotiation mod_rewrite mod_setenvif mod_socache_shmcb mod_ssl 

Meine aktuelle .htaccess-Datei sieht folgendermaßen aus: "Dies ist die werkseitige Standardeinstellung."

Optionen -MultiViews

RewriteEngine On

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

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

Ich habe auch versucht, den folgenden Code gemäß der [Dokumentation 1 zu ändern.

Options +FollowSymLinks
RewriteEngine On

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

Ich erhalte jedoch immer noch die 404-Seite, wenn ich zu gehe

https://sub.example.com/laravel/public/authors

Was mache ich falsch? Wie kann ich dieses Problem beheben?

5
Mike A

Ich sehe dasselbe Verhalten, dass ich die/route besuchen kann, aber alle anderen Seiten geben eine 404 zurück, wenn ich Laravel-Sites zum ersten Mal einrichte.

In Ihrer Apache-Konfigurationsdatei httpd.conf oder httpd-vhosts.conf müssen Sie die Anweisungen aktivieren, die in die .htaccess-Datei eingefügt werden können.

Hier ist ein Beispiel meiner VirtualHost-Konfiguration:

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "C:/www/laravel_authority-controller_app/public"
    ServerName authoritycontroller.www
    ErrorLog "logs/AuthorityController.www-error.log"
    CustomLog "logs/AuthorityController.www-access.log" common
    <Directory "C:/www/laravel_authority-controller_app/public">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.Apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks Includes ExecCGI

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   AllowOverride FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Require all granted
    </Directory>
</VirtualHost>

Der Schlüsseleintrag für Ihre Ausgabe lautet AllowOverride All. Dies sollte ausreichen, um die Website zum Laufen zu bringen. Sie können jedoch auch options und Require all granted angeben, wenn sie auf der gesamten Website konsistent sind.

12
BalmainRob

Wenn Ihre Laravel- Routen nicht funktionieren und Sie beim Versuch, eine Seite zu laden, "Not Found" -Fehler erhalten, ist Ihre .htaccess-Datei möglicherweise nicht berechtigt, ihre Pflicht zu erfüllen.

Der Schlüssel ist die Apache AllowOverride-Direktive.

Wenn Sie AllowOverride nicht auf All festgelegt haben, kann Ihre Laravel .htaccess-Datei (/public/.htaccess) mod_rewrite nicht aktivieren, und Ihre Routen funktionieren nicht.

Der erste Schritt ist das Öffnen der Apache-Datei httpd.conf. In OS X befindet es sich an:

/private/etc/Apache2/httpd.conf

Option 1) Ändern Sie Ihre Hauptanweisung

Dadurch wird der AllowOverride-Wert für alle Ihre Websites geändert. Suchen Sie in Ihrer httpd.conf-Datei nach der Hauptanweisung:

**<Directory "/var/www/html">
    ...
    AllowOverride None
    ...
</Directory>**

Ändern Sie es einfach so:

**<Directory "/var/www/html">
    ...
    AllowOverride All
    ...
</Directory>**

Option 2) Fügen Sie der Direktive Ihrer Site eine Direktive hinzu.

**

<VirtualHost 127.0.0.1:80>
        DocumentRoot "/var/www/html/epigroove/public"
        ...
        <Directory "/var/www/html/epigroove/public">
            AllowOverride All
        </Directory>
    </VirtualHost>

**

Speichern Sie die Änderungen in Ihrer httpd.conf-Datei, starten Sie Apache neu oder laden Sie ihn neu. Die Routen sollten jetzt betriebsbereit sein.

2
smartankur4u

wenn Sie auf Ubuntu sind, sollten Sie die 3. Sache tun. 1. Prüfen Sie, ob "/ var/www/html/YourProject/public/.htacess" so ist.

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

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

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

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

2. Fügen Sie diese Zeilen in /etc/Apache2/sites-available/000-default.conf hinzu

<Directory "/var/www/html">
 AllowOverride all
 Require all granted
</Directory>

Hinweis: Denken Sie daran, dass es sich um eine Systemdatei handelt, daher sollten Sie diesen Befehl verwenden

Sudo gedit /etc/Apache2/sites-available/000-default.conf 
  1. durch das letzte Aktivierungs-Umschreibmodul.

    LoadModule rewrite_module modules/mod_rewrite.so

oder

Sudo a2enmod rewrite
2
Yosved Villar

Wenn Sie Apache HTTPD 2.2.15 unter Linux ausführen (in meinem Fall CentOS 6.7), sieht die Verzeichnisdirektive so aus

<Directory />
    Options Indexes FollowSymLinks Includes ExecCGI  
    AllowOverride All  
    allow from all  
</Directory>  

Sie benötigen die Optionszeile jedoch wahrscheinlich nicht, es sei denn, Sie verwenden diese Optionen.

Danke an die 2.4 Antwort. Es hat mir geholfen, dieses Problem für 2.2 zu lösen, und ich habe einen anderen Server mit 2.4, auf den ich es auch anwenden kann.

0
Carlos

wenn es auf einem Live-Server ist, probieren Sie es aus, es hat bei mir trotzdem funktioniert.

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews -Indexes
</IfModule>
Options +FollowSymLinks
RewriteEngine On
RewriteBase /


# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# 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]
0
The Dead Guy

auch der URList case sensitive zum Ordnernamen

ordnername: camelCasename __ dann muss die URL localhost/camelCase/route-1 sein

hoffe das hilft jemandem xD, ein bisschen dumm 

0
david valentino