経緯と現象
- Apache Webサーバ上でLaravelプロジェクトを動かしたい
- トップページは表示される
- 他のページへ遷移しようとすると、[404 Not Found]エラー
環境
- Virtualbox
6.1.34
- CentOS
7.9
- Apache
2.4.6
- PHP
7.1.33
- Laravel
5.6
- プロジェクトルートパス
/var/www/html/project
原因
Apacheが「htaccessによるディレクティブ(指示)の上書き」を許可していなかった
- そのため、トップページ以外は正しいリクエストがLaravelプロジェクトに届いていませんでした
.htaccess(エイチティーアクセス)ってなに?
- Apacheの動作をディレクトリ単位で制御するためのファイルです
(Nginxでは使えない) - リダイレクトやBASIC認証、アクセス制限などを設定できます
- ちなみに、Apache自体の制御は
httpd.conf
ファイルで行います(セキュリティ的には極力confファイルで制御するのが良いらしいです)
Laravelと.htaccess
- Laravelプロジェクトを作成するとpublic/に
.htaccess
が作られます - Laravelプロジェクトにきたリクエストは、すべてpublic/index.phpを経由することになります
- そのため、public配下にある.htaccessによって制御が行われます
解消方法
Apacheの設定ファイル(httpd.conf
)で、.htaccessによる制御を許可します
- 設定ファイルを開く
sudo vi /etc/httpd/conf/httpd.conf
- 書き換え許可を設定
- ⚠️Apacheのバージョンによっては書き方が違います
<Directory "var/www/html/project">
Require all granted 👈 指定ディレクトリへのアクセスをすべて許可
AllowOverride All 👈 .htaccessで全てのディレクティブを許可
</Directory>
- Apacheを再起動
systemctl restart httpd
- 無事アクセスできました🎉
参考
Apacheディレクティブの使い方 - hana_shinのLinux技術ブログ