前提
エックスサーバーでは、サブドメインのドキュメントルートが固定 されています。
/home/akkun1114/メインドメイン/public_html/サブドメイン
c
→ このフォルダを Laravel の public/ にリダイレクトする必要がある。
## 現在のディレクトリ構成(エックスサーバー上)
```bash
/home/akkun1114/akkun1114.com/public_html/exp-alert.akkun1114.com/ ← エックスサーバーの固定ドキュメントルート
/home/akkun1114/akkun1114.com/public_html/exp-alert.akkun1114.com/EXP-alert/ ← Laravel プロジェクト本体
/home/akkun1114/akkun1114.com/public_html/exp-alert.akkun1114.com/EXP-alert/public/ ← Laravel の公開フォルダ
→ exp-alert.akkun1114.com にアクセスすると EXP-alert/public/ を読み込むように設定する。
手順
1:.htaccess を新規作成
エックスサーバーの exp-alert.akkun1114.com のルートに .htaccess を作成する。
まず、カレントディレクトリを確認
pwd
↓ 期待する出力:
/home/akkun1114/akkun1114.com/public_html/exp-alert.akkun1114.com
これがエックスサーバーで固定されている exp-alert.akkun1114.com のルート
2:.htaccess を新規作成(なかったら)
## /home/akkun1114/akkun1114.com/public_html/exp-alert.akkun1114.com
ls -a
.htaccessが、存在しなかった場合新規作成
どちらでも良い
vi /home/akkun1114/akkun1114.com/public_html/exp-alert.akkun1114.com/.htaccess
echo "" > /home/akkun1114/akkun1114.com/public_html/exp-alert.akkun1114.com/.htaccess
3:.htaccess の内容を記述
vi .htaccess
作成した .htaccess を開き、以下のコードを記述。
<IfModule mod_rewrite.c>
RewriteEngine On
# HTTPSリダイレクト(必要に応じて)
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Laravel の public ディレクトリをルートとして設定
RewriteCond %{REQUEST_URI} !^/EXP-alert/public/
RewriteRule ^(.*)$ EXP-alert/public/$1 [L]
</IfModule>
これにより、
・HTTPS が適用されていない場合、自動的に https:// にリダイレクトする
・アクセスが exp-alert.akkun1114.com に来た場合、自動的に EXP-alert/public/ をルートとして参照する
上記コードの丁寧な解説
4:.htaccess のパーミッションを設定
作成した .htaccess のパーミッションを適切に変更。
chmod 644 /home/akkun1114/akkun1114.com/public_html/exp-alert.akkun1114.com/.htaccess
644 にする理由は、
・rw-r--r-- (644) → オーナー(自分)は読み書き可、他のユーザーは読み取りのみ可
・セキュリティ的に 777 は危険なので使わない!
5:.htaccess が正しく作成されたか確認
ls -la /home/akkun1114/akkun1114.com/public_html/exp-alert.akkun1114.com/
↓ 期待される出力
-rw-r--r-- 1 akkun1114 members xxxx .htaccess
.htaccess がリストに表示されていればOK!
.htaccess のキャッシュをクリア
エックスサーバーでは .htaccess の変更がすぐに反映されないことがあるため、以下のコマンドでキャッシュをクリア。
touch /home/akkun1114/akkun1114.com/public_html/exp-alert.akkun1114.com/.htaccess
これにより .htaccess のタイムスタンプを更新し、サーバーが最新の設定を読み込む
7:.htaccess 設定後の動作
サブドメインにアクセスすると、サブドメイン/Laravelプロジェクト/public/ がルートとして動作する!