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
_
私は何を間違えていますか?この問題を修正するにはどうすればよいですか?
/ルートにアクセスできるという同じ動作を確認しますが、最初に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サイト全体で一貫している場合は、options
とRequire all granted
を含めることもできます。
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
最後に書き換えモジュールを有効にします。
LoadModule rewrite_module modules/mod_rewrite.so
または
Sudo a2enmod rewrite
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を再起動または再ロードすると、ルートが稼働するはずです。
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を実行している別のサーバーがあり、それも適用できます。
ライブサーバーでの場合、これを試してみてください。
<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]
また、URL
は、フォルダー名に対して大文字と小文字が区別されますです。
フォルダー名:camelCase
の場合、URLはlocalhost/camelCase/route-1
これが誰かxDの助けになることを願っています