【Laravel】エックスサーバで、ドメイン名でアクセスできるようにする
Laravelで開発してエックスサーバで公開する時、ドメイン名で公開するには、少し工夫が必要なようです。
例えば、
Laravelプロジェクトをエックスサーバの公開ディレクトリに置くと、
https://[ドメイン名]/[プロジェクト名]/public/
というアドレスになってしまう。
これを、
https://[ドメイン名]/
というアドレスでアクセスできるようにしたい。
前提
・Laravelプロジェクト本体は、公開ディレクトリには置かず、エックスサーバの非公開ディレクトリに置くことにします。
例えば、ディレクトリ構造はこんな感じ。
home/
└ [サーバーID]/
└[ドメイン名]/
├public_html(公開ディレクトリ)/ ←ここにアクセスしたら、
│
│
└[プロジェクト名](非公開ディレクトリ)/
└ public/ ←ここを参照させたい
問題点
・Laravelのindex.php
が「public」フォルダ内にある。
・エックスサーバの公開ディレクトリが固定されている。
方法1
シンボリックリンクと「.htaccess」ファイルを使った方法。
シンボリックリンクの作成
まず、以下のコマンドで、Laravelプロジェクトの「public」へのシンボリックリンクを「public_html」の中に作成します。
$ ln -s $HOME/[ドメイン名]/[プロジェクト名]/public $HOME/[ドメイン名]/public_html/public
これで、
https://[ドメイン名]/public/
というアドレスで公開できるようになりました。
余談・・・
$ ln -s $HOME/[ドメイン名]/[プロジェクト名]/public $HOME/[ドメイン名]/public_html
こうしたらいいんじゃね?って思うかもしれませんが、
実行すると、「public_html」は存在しています。と怒られます。
かと言って、「public_html」は削除する事ができません。
次に、
https://[ドメイン名]/ へのアクセスがあったら、
https://[ドメイン名]/public/ を参照させるようにします。
「.htaccess」ファイルの設置
中身は、こんな感じ。
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ public/$1 [QSA,L] </IfModule>
3行目で、ドメイン名にアクセスがあったら、「public」フォルダ内を参照するようにしています。
この.htaccess
ファイルを、「public_html」の中に置きます。
以上で、ドメイン名でアクセスできるようになります!
方法2
こちらは、もっと簡単♪
ファイルの移動
Laravelプロジェクトの「public」の中身を、
サーバの公開ディレクトリ「public_html」に、すべて移動します。
パスの書き換え
移動したindex.php
を開いて、2箇所を編集します。
require __DIR__.'/../vendor/autoload.php'; という行を require __DIR__.'/../[プロジェクト名]/vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php'; という行を $app = require_once __DIR__.'/../[プロジェクト名]/bootstrap/app.php';
パスは、index.php
ファイルから見た、それぞれのファイルへのパスです。今回の場合なら、こんな感じ。
まとめ
いずれかの方法で、ドメイン名でのアクセスができるようになったと思います。
他のサーバ、例えば、さくらのレンタルサーバなどは、公開ディレクトリを決められるので、困らないと思いますが、エックスサーバの場合は、この方法しかないようです。
-
前の記事
【Laravel6.0】データベースへのアクセスから操作方法まで(マイグレーションなど) 2020.02.15
-
次の記事
Laravelで作ったWebアプリをサーバにアップロード(デプロイ)する方法 2020.02.16
コメントを書く