4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LaravelをApache上で実行するときの備忘録(htaccessが動作しない)

Posted at

経緯と現象

  • Apache Webサーバ上でLaravelプロジェクトを動かしたい
  • トップページは表示される
  • 他のページへ遷移しようとすると、[404 Not Found]エラー

環境

  • Virtualbox6.1.34
  • CentOS7.9
  • Apache2.4.6
  • PHP7.1.33
  • Laravel5.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技術ブログ

Requireディレクティブ:アクセスの許可や拒否などのアクセス制限を行う(Apache2.4以降)

core - Apache HTTP サーバ バージョン 2.4

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?