さくら レンタルサーバ 500 Internal Server Error を解決する

さくらのレンサバ(スタンダード) に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) サーバコントロールパネルで マルチドメインの対象のフォルダ を指定

管理画面上の設定を行う.

  1. サーバコントロールパネル ログイン
  2. ドメイン設定
  3. ドメイン一覧から対象ドメインの 変更 ボタンクリック
  4. 2. マルチドメインの対象のフォルダをご指定ください にドキュメントルートにするディレクトリ名を入力
    • 今回は public にした
  5. 送信 クリック

(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も先述したような記述になっていれば問題なく表示されるはず.

今回は以上.

スポンサーリンク
336 x 280 – レクタングル(大)
336 x 280 – レクタングル(大)
  • このエントリーをはてなブックマークに追加

この記事が気に入ったら
いいね!しよう

スポンサーリンク
336 x 280 – レクタングル(大)
トップへ戻る