web-dev-qa-db-ja.com

Laravel 5.1-404 Not Found?

Laravel 5.1を初めて使用しようとしています。インストールすることができ、_https://sub.example.com/laravel/public/_が何をすべきかを表示しています。しかし、作成したビューで404エラーが表示されます。ページが見つかりません。

ここに私がこれまでに行ったことを示します。

_laravel\app\Http\controllers\Authors.php_にコントローラーを作成しました

_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());
    }
}
_

次に、_laravel\resources\views\Authors\index.blade.php_にビューを作成しました

_index.blade.php_ファイルの背後にあるコードは次のとおりです。

_@layout('layouts.default')


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

次に、_laravel\resources\views\layouts\default.blade.php_にレイアウトを作成しました

_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>
_

最後に、_laravel\app\Http\routes.php_にルートを作成しました

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

Route::get('authors', array('as'=>'authors', 'uses'=>'authors@index'));
_

しかし、何らかの理由で404エラーページが見つかりませんでした。

行のコメントを外して、Apache 2.4.9でmod_rewriteを有効にしました

_LoadModule rewrite_module modules/mod_rewrite.so
_

その後、Apacheを再起動しました。

php_info()出力でわかることから、mod_rewriteが有効になっています

_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 
_

私の現在の.htaccessファイルは、この「工場出荷時のデフォルト」のように見えます

オプション-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]
_

documentation に従って、以下のコードに変更することも試みました。

_Options +FollowSymLinks
RewriteEngine On

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

しかし、私はに行くとき、私はまだ404ページを取得しています

_https://sub.example.com/laravel/public/authors
_

私は何を間違えていますか?この問題を修正するにはどうすればよいですか?

8
Junior

/ルートにアクセスできるという同じ動作を確認しますが、最初にLaravelサイトをセットアップしたときに他のすべてのページが404を返します。

Apache構成ファイルhttpd.confまたはhttpd-vhosts.confで、.htaccessファイルに配置できるディレクティブを有効にする必要があります。

VirtualHost構成の例を次に示します。

<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>

問題の重要なエントリはAllowOverride Allです。これでWebサイトを機能させることができますが、Webサイト全体で一貫している場合は、optionsRequire all grantedを含めることもできます。

16
BalmainRob

ubuntuを使用している場合は、3つのことをする必要があります。 1.「/ var/www/html/YourProject/public/.htacess」が次のようになっているかどうかを確認します。

<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. /etc/Apache2/sites-available/000-default.confに次の行を追加します

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

注:これはシステムファイルであるため、このコマンドを使用する必要があります。

Sudo gedit /etc/Apache2/sites-available/000-default.conf 
  1. 最後に書き換えモジュールを有効にします。

    LoadModule rewrite_module modules/mod_rewrite.so

または

Sudo a2enmod rewrite
6
Yosved Villar

Laravelルートが機能せず、ページをロードしようとするたびに「Not Found」エラーが表示される場合、.htaccessファイルにはその義務を果たす権限がありません。

キーはApache AllowOverrideディレクティブです。

AllowOverrideをAllに設定していない場合、Laravel .htaccessファイル(/public/.htaccess)はmod_rewriteを有効にできず、ルートは機能しません。

最初のステップは、Apache httpd.confファイルを開くことです。 OS Xでは、次の場所にあります。

/private/etc/Apache2/httpd.conf

オプション1)メインディレクティブを変更する

これにより、すべてのWebサイトのAllowOverride値が変更されます。 httpd.confファイルで、メインディレクティブを探します。

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

これに変更するだけです:

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

オプション2)サイトのディレクティブにディレクティブを追加します。

**

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

**

httpd.confファイルへの変更を保存し、Apacheを再起動または再ロードすると、ルートが稼働するはずです。

2
smartankur4u

Linux(私の場合はCentOS 6.7)でApache HTTPD 2.2.15を実行している場合、ディレクトリディレクティブは次のようになります。

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

ただし、これらのオプションを使用している場合を除き、おそらくOptions行は必要ありません。

2.4の回答に感謝します。 2.2でこの問題を解決するのに役立ち、2.4を実行している別のサーバーがあり、それも適用できます。

1
Carlos

ライブサーバーでの場合、これを試してみてください。

<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

また、URLは、フォルダー名に対して大文字と小文字が区別されますです。

フォルダー名:camelCaseの場合、URLはlocalhost/camelCase/route-1

これが誰かxDの助けになることを願っています

0
david valentino