はじめに
Laravelプロジェクトをロリポップ にデプロイした際に、つまづいた点について、残そうと思います。
また、紹介しているブログを読んでいること前提ですので、話についていけないって思ったら、そっちも一緒に読んでみるといいかもしれないです。(前提の知識が多少あるかもしれないです。)
つまづいた点
基本的に以下のURLの人の記事を参考にデプロイ作業していました。
https://qiita.com/yuzuha3ds/items/4c6b7d3f83e88b45d968
所々、上記のブログで省略されている部分があった気がしますが、些細なことだった気がするので、(忘れてしまったので)上記のブログ見てれば、ある程度、なんとかなると思います。
つまづいた点は、本題にもある通り、
ドメイン名/publicじゃないと接続できず、
URLにドメイン名を打っても、403エラーが表示されていました。
ちなみに、上記のブログでも403が表示されていましたが、私の場合、WAFの設定が原因ではありませんでした。後、おそらく、WAFは、セキュリティ面を考えると、有効のままの方が良い気がします。
ざっくり、何をしたか(下で詳しく述べます)
https://gfonius.net/blog/laravel-url-public/
・これ通りに.htaccessを編集した。
→ドメイン名でアクセスしても500エラー(なんでや?)。
publicを加えると、404エラー(こちらは、想定内)。
・ドメイン直下にhtmlのファイルを置いて、ドメイン名自体が使えるか試す。
→ドメイン名をURLに打つと、ドメイン直下のhtmlが表示された。ドメイン名は使えることが分かる。原因は、Laravelプロジェクト側に問題がある?
ドメイン直下に.htaccessを配置し、public/index.phpを遷移するように設定することで解決。
上記を踏まえて、やるべきことを述べます
① そもそも、ドメイン名が使えるか調べる。
ロリポップのサーバーにssh接続し、
~/web/ドメイン名の配下に
// ~/web/ドメイン名のディレクトリ内にindex.htmlファイルを作成する。
$ vim index.html
// 入力モード
:i
// 適当にhtmlタグを入れる。下の例は、適宜、変更してください。できてるか確かめてないので。
例)<h2>ドメイン名は表示されたよ!</h2>
Macの場合、escタブを押し、入力モード終了。
// :wqで保存する+閉じる(:qで閉じるだけ)
:wq
ドメイン名をURLに打って、先ほど、作成したhtmlファイルが表示されるかどうか確認。表示されれば、OK。
② ドメイン名のフォルダに.htaccessを作成+設定する。
.htaccess作成
cd ~/web/ドメイン名
// .htaccessを設置する。
vim .htaccess
.htaccess設定する
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ public/index.php
</IfModule>
~/web/ドメイン名 配下に.htaccessを設置することで、ドメイン名がURL打たれた時、public/index.phpに遷移することができる。
上の補足をすると、
public内にも.htaccessはあるが、ドメイン名/publicにアクセスしないと使えないので、ドメイン名にアクセスした時に、ドメイン名/publicに遷移させないといけない。
そして、念のために、public内の.htaccessについても載せておく。(デフォルトで同じものがあると思いますが)
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# 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]
</IfModule>
これがないと、仮に、ドメイン名から、publicのindex.phpへ遷移したとしても、CSSが反映されない状態になる。