LoginSignup
1
3

More than 5 years have passed since last update.

さくらレンタルサーバ(共用)に CakePHP2 で作ったアプリをデプロイしようとしてはまった話

Last updated at Posted at 2016-10-03

やりたかったこと

  • ドキュメントルート以外にアプリをインストール
  • ドキュメントルートからはシンボリックリンクをはる

実際にシンボリックリンクを貼ってみる

SSH でログインし、おなじみの ln -s source dest を叩く。
css や js といったディレクトリ系は問題なくリンクが貼れている。
しかし index.php や .htaccess といったファイル系はなぜか作成後にディレクトリアイコンになる。
この状態でアクセスするとエラーメッセージがでる。

オプションの s を外したハードリンクでは貼ることができたし、ちゃんとアクセスすることができた。

原因を検索してみたところ、そもそも共有サーバではシンボリックリンクが貼れない仕様らしい。
ナンテコッタ。

www 配下にデプロイして、ドキュメントルートを変えよう

仕方がないので www 配下にファイルをまるっと移動させる。
このままの状態だとライブラリとかのソースコードがノーガードなので、ドキュメントルートを変更してみる。

「マルチドメインとして使用する」にチェックが入っていても、初期ドメイン状態ではドキュメントルートを変更できないらしい!
ナンテコッタ。

もう普通に構築する

しかしここにも罠が。
.htaccess をデフォルトから手を加えないといけないらしい。

以下のファイルの2行目をそれぞれ加筆する。
* /www/.htaccess
* /www/app/.htaccess
* /www/app/webroot/.htaccess

/www/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
/www/app/.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /app
    RewriteRule ^$ webroot/ [L]
    RewriteRule (.*) webroot/$1 [L]
</IfModule>
/www/app/webroot/.htaccess
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /app/webroot
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

git などで clone してくると、サブフォルダが作られたりするので、そういう場合は、それぞれのファイルで //sub/ に変更する。

終わってみて

共有サーバだからいろいろ制限あるのは仕方がないんだろうなぁ。
.htaccess の改変は割とよくあるので気にならないけど、シンボリックリンク禁止はセキュリティ的な観点からなのかな。
もし開発前からさくらの共有サーバを使うことが分かっていれば、あらかじめ webroot を分離した状態で構築するのが良いと思う。
分離させた開発はさくら以外にも使い道はあるだろうし。

分離させる際は app/webroot/index.php あたりをごにょごにょ書き換えれば良い。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3