さくらのレンサバ(スタンダード) にLaravel5.3で作ったプロジェクトをデプロイしようとしたらこのエラーに遭遇.
さくらは初めてなので, 今回の対応策をまとめる.
なお, 今回は解決のために @ctw_yamada さんにたくさん助けてもらった.
本当にありがとう.
今回の概要は次の通り.
動作環境
- さくら レンタルサーバ (スタンダード)
- Gotlab web版
- Laravel5.3
前提条件
以下の条件で動作させる.
- composer install 済
- Gitlabから git clone 済
- プロジェクトディレクトリの場所:
/home/アカウント名/プロジェクトディレクトリ
- プロジェクトディレクトリの場所:
- シェルから ssh接続
- お名前.com で独自ドメイン取得
- サーバコントロールパネルでは
マルチドメインとして使用
を選択
現象
http://取得したドメイン
でアクセスしても期待通りの表示がされない.
ブラウザに表示されるエラーは次の通り.
Internal Server Error
このときの設定を次の2点に分けて紹介.
- サーバコントロールパネル
- ディレクトリ構造
サーバコントロールパネル
- ドメイン設定
マルチドメインとして使用する(推奨)
独自ドメイン取得後, 上記を設定した.
後は全部デフォルト設定.
ディレクトリ構造
/www/
直下に, Laravelプロジェクトディレクトリの ファイルのシンボリックリンク を貼った.
[アカウント名@www数字 ~/www]$ ln -s ~/プロジェクトディレクトリ/public/* ~/www/
[アカウント名@www数字 ~/www]$ ln -s ~/プロジェクトディレクトリ/public/.htaccess ~/www/
[アカウント名@www数字 ~/www]$ ls -la ~/www/
total 12
drwx---r-x 2 アカウント名 users 512 Jun 12 13:41 .
drwx---r-x 14 アカウント名 users 512 Jun 10 13:16 ..
lrwxr-xr-x 1 アカウント名 users 34 Jun 12 13:41 .htaccess -> /home/アカウント名/プロジェクトディレクトリ名/public/.htaccess
lrwxr-xr-x 1 アカウント名 users 28 Jun 12 13:41 css -> /home/アカウント名/プロジェクトディレクトリ名/public/css
lrwxr-xr-x 1 アカウント名 users 36 Jun 12 13:41 favicon.ico -> /home/アカウント名/プロジェクトディレクトリ名/public/favicon.ico
lrwxr-xr-x 1 アカウント名 users 34 Jun 12 13:41 index.php -> /home/アカウント名/プロジェクトディレクトリ名/public/index.php
lrwxr-xr-x 1 アカウント名 users 27 Jun 12 13:41 js -> /home/アカウント名/プロジェクトディレクトリ名/public/js
lrwxr-xr-x 1 アカウント名 users 35 Jun 12 13:41 robots.txt -> /home/アカウント名/プロジェクトディレクトリ名/public/robots.txt
lrwxr-xr-x 1 アカウント名 users 33 Jun 12 13:41 tmp.json -> /home/アカウント名/プロジェクトディレクトリ名/public/tmp.json
このときの .htaccess の中身は次の通り.
.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Directory index
# DirectoryIndex index.php index.html
DirectoryIndex tmp.php index.php index.html
</IfModule>
.htaccess を次のように工夫したけど効果なし.
- シンボリックリンクではなく,
/www/
直下に .htaccess ファイルを作成
原理的にはこれで表示されると思ってたけど, できなかった.
/www/
直下にファイルのシンボリックリンクを貼って表示する方法を知っている方, 情報待ってます.
手順
ここで別の方法でトライしたら表示に成功した.
試した方法は全部で2通り.
www/
直下に/public/*
を直置き(コピー)www/
に/public
ディレクトリのシンボリックリンクを貼る- サーバコントロールパネルで
マルチドメインの対象のフォルダ
を指定
- サーバコントロールパネルで
どちらのパターンでも表示に成功したが, 今後の管理を考えて後者を採用することにした.
以下, 後者の手順を解説.
概要
.htaccessの記述は先程紹介した通り.
さくらのレンタルサーバは, デフォルトだと /home/アカウント名/www
がドキュメントルートになっている.
方針としては,
/www/
をドキュメントルートにするのではなく/www/
直下に1つディレクトリを置き (シンボリックリンクで)- そのディレクトリをドキュメントルートとする
手順は次の通り.
- サーバコントロールパネルで
マルチドメインの対象のフォルダ
を指定 /www/
直下に/public
のシンボリックリンクを貼る
以下, 詳細.
(1/2) サーバコントロールパネルで マルチドメインの対象のフォルダ
を指定
管理画面上の設定を行う.
- サーバコントロールパネル ログイン
- ドメイン設定
- ドメイン一覧から対象ドメインの 変更 ボタンクリック
2. マルチドメインの対象のフォルダをご指定ください
にドキュメントルートにするディレクトリ名を入力- 今回は
public
にした
- 今回は
- 送信 クリック
(2/2) /www/
直下に /public
のシンボリックリンクを貼る
あとは /www/
直下にシンボリックリンクを貼るだけ.
$ ln -s ~/プロジェクトdir/public ~/www/
$ ls -la
[アカウント名@www3111 ~/www]$ ls -la
total 12
drwx---r-x 2 アカウント users 512 Jun 12 13:44 .
drwx---r-x 14 アカウント users 512 Jun 10 13:16 ..
lrwxr-xr-x 1 アカウント users 24 Jun 11 12:42 public -> /home/アカウント名/プロジェクトdir/public
ブラウザからアクセス確認
あとは自分で取得したドメインにアクセスして表示確認を行う.
.htaccessも先述したような記述になっていれば問題なく表示されるはず.
今回は以上.