エックスサーバーで運用中のLaravelにサブドメインを追加したい

laravelApp を Laravel プロジェクト名として説明します。

やりたいこと

  • エックスサーバーで運用中の Laravel サイトを維持したまま、サブドメインを追加したい
https://example.com        (Laravel)
https://blog.example.com   (WordPress)
目次

前提条件

  • エックスサーバーを使用している
  • Laravel はすでに運用中
  • 現在は public_html が Laravel の public へのシンボリックリンクになっている

問題点

Laravel のみで運用している場合、

public_html を Laravel の public に直接向ける構成でも問題ありません。

しかし、

  • サブドメインを追加したい
  • WordPress を同一ドメイン配下で使いたい

という場合、

public_html がシンボリックリンクのままだと構成上の制約が出ます。

そのため、public_html を「実体ディレクトリ」に戻す必要があります。

手順① public_html を実体ディレクトリにする

cd ~/example.com

# 既存のシンボリックリンクを削除
rm public_html

# 実体ディレクトリを作成
mkdir public_html

手順② 元のファイルをコピーして編集

Laravel のエントリーポイントと .htaccess をコピーします。

cd ~/example.com

cp laravelApp/public/index.php public_html/index.php
cp laravelApp/public/.htaccess public_html/.htaccess

index.php を編集

if (file_exists($maintenance = __DIR__.'/../laravelApp/storage/framework/maintenance.php')) {

require __DIR__.'/../laravelApp/vendor/autoload.php';

$app = require_once __DIR__.'/../laravelApp/bootstrap/app.php';

※ パスを laravelApp に合わせて修正(../ → ../laravelApp/)します。

.htaccess(基本的に編集不要)

Laravel 標準の .htaccess をそのまま使用します。

手順③ 必要なシンボリックリンクを作成

Laravel の public 配下を参照できるようにする

※storageへのリンクは、php artisan storage:link を使用しない

cd ~/example.com/public_html

ln -s ../laravelApp/public assets
ln -s ../laravelApp/public/images images
ln -s ../laravelApp/storage/app/public storage

追加ファイル

ドキュメントルート直下に必要なファイルがあれば追加します。

ln -s ../laravelApp/public/favicon.ico favicon.ico
ln -s ../laravelApp/public/robots.txt robots.txt

手順④ (Laravel) .env の修正

Laravelの.env本番、ローカルともにASSET_URLを追加します。

# 本番環境のに以下を追加
ASSET_URL=/assets

# ローカルのテスト環境に以下を追加
ASSET_URL=

最終的なディレクトリ構成(完成形)

~/example.com/
├─ laravelApp/               ← Laravel 本体
│  ├─ app/
│  ├─ bootstrap/
│  ├─ public/
│  │  ├─ build/
│  │  ├─ images/
│  │  ├─ index.php
│  │  ├─ favicon.ico
│  │  ├─ robots.txt
│  │  └─ .htaccess
│  └─ storage/
│
└─ public_html/              ← 実体ディレクトリ(重要)
   ├─ index.php              ← Laravel フロント
   ├─ .htaccess
   ├─ assets       -> ../laravelApp/public/
   ├─ images       -> ../laravelApp/public/images
   ├─ storage      -> ../laravelApp/storage/app/public
   ├─ favicon.ico  -> ../laravelApp/public/favicon.ico
   ├─ robots.txt   -> ../laravelApp/public/robots.txt
   └─ blog/                  ← WordPress

まとめ

  • Laravel 単体運用では問題なかった構成でもサブドメイン追加時には public_html の扱いが重要

ポイントは以下の 3 点です。

  • public_html は 実体ディレクトリにする
  • Laravel の public は シンボリックリンクで参照する
  • エントリーポイント(index.php)のパスを正しく修正する

この構成にすることで、

  • メインドメイン:Laravel
  • サブドメイン:WordPress

を無理なく共存させることができます。

サブドメインの追加やWordPressのインストールは、特につまずく点がないため割愛します。

コメント

コメントする

目次