publicディレクトリの中にサブディレクトリを作成したらAccess forbidden(403エラー)が出た。
気づかずにしばらくハマったのでメモ。
ディレクトリ構成
/
resources/
public/
foo/
css/
views/
foo/
index.blade.php
routes/web.php
Route::get('/foo', 'FooController@index');
publicディレクトリの.htaccessを確認したら下記の記述があった。
public/.htaccess
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
LaravelはURLにアクセスした場合フロントコントローラーで処理されているが、
RewriteCond %{REQUEST_FILENAME} !-d
の記述によって既存のディレクトリは除外されているよう。
publicディレクトリの既存のディレクトリに直接アクセスしていたため Access fobidden がでていたと思われる。
解決策
1.RewriteCond %{REQUEST_FILENAME} !-d
をコメントアウトする
public/.htaccess
# Handle Front Controller...
# RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
でもLaravelの他の機能に影響が出そうでちょっと怖い。
2.Routeのurlを変更する
routes/web.php
Route::get('/foo/index', 'FooController@index');
無難な気がする。