さくらのレンタルサーバでサイト構築時の注意点

いまさらですが、Drupal7へのアップグレード作業をしているときに気付いてしまいました。

さくらのレンタルサーバでは、契約時には以下のサブドメイン名でサイトの構築が可能です。

標準のサイト
・ユーザID.sakura.ne.jp(ドキュメントルートディレクトリ:$HOME/www)

さらに、さくらインターネットのサブドメインを無料で取得できます。(2個まで)
※有償の独自ドメインを取得した場合もドメイン名が異なるだけでこのケースと同じ構成になります。

追加のサイト
・ユーザID.XXXX.YYYY

この追加をすることでマルチドメイン構成になります。
追加のドメインでサイトを構築するには、各ドメインに対してローカルディレクトリ名を設定しなければなりません。($HOME/www/ZZZZZZ)※ZZZZZZはユニーク
※ZZZZZZはリンクでもかまいません。
※取得しているドメインの数だけドキュメントルート以下にドメインごとのディレクトリを割り当てることになります。

問題は、標準のサイトを使用せずに追加のサイトのみを使用するケースです。
さくらのレンタルサーバの場合にはOptionsディレクティブを使用できませんので、通常はディレクトリ以下に該当ファイルが存在しない場合は一覧表示されてしまいます。
そのため、稼動している追加サイトの.htaccessにはディレクトリ一覧が表示されないような設定を施します。
念のため、標準のサイト(ドキュメントルート)の.htaccessにも一覧表示されないように細工を施しておきます。

私の場合は、追加のサイトが2つあるのでドキュメントルートにはサイト独自の設定はしないようにして、IPアドレスによるアクセス制限など共通の設定のみにしてありました。
サイト構築時にはこれで十分だと思っていました。

しかし、落とし穴がありました。

仮に「標準サイトのURL/ZZZZZZ/AAAAAA」でアクセスされると追加のサイト内の一覧が表示されてしまいます。
ZZZZZZがDrupalシステムルートディレクトリであっても、追加のサイトのURLではなく標準サイトのURLでアクセスされているのでrewriteルールは反応しません。

追加のサイトが1つなら標準サイトの.htaccessに301リダイレクトで転送をしていたでしょうが、サイトが2つなのでまったく気にとめていませんでした。
また、標準のブログサイトがこの標準サイトを使っているという誤認識があったのも影響しています。

2年間以上、全く気付かなかった事にショックを感じました。
ただ、追加のサイトのローカルディレクトリ名が知られなければZZZZZZの部分がわからないので大丈夫そうですが、標準サイトに何も設定をしていなければファイルブラウザーの操作とおなじように階層をたどり、それぞれの追加サイトのローカルディレクトリ名がわかってしまい、サイトに関係なく自由に表示ができてしまいます。

ZZZZZZがDrupalのサイトだったとしても、Drupalルートディレクトリに配置した.htaccessには追加サイトのURLでアクセスすることを前提にしたルールしかありませんし、Drupalルートディレクトリのindex.phpが機能することが前提でつくりっこんでいます。そのため標準サイトのURLでDrupalディレクトリ以下にアクセスがあるとそのまま一覧が表示されてしまいます。

やっちまった!

とりあえず標準サイトには、標準サイトの名前の後ろに追加サイトのディレクトリ名が含まれていれば無条件でそのサイトのトップページに転送するようなルールを記載して対応しました。

Redirect permanent /domainA-DirName http://domainA-URL
Redirect permanent /domainB-DirName http://domainB-URL


D7にすることで動画のアップロードをEmbedded Media Field+MediaFrontからMedia+MediaFrontに変更しましたが、このMediaではFileEntityが必須のモジュールに なっているためEntityを無視することもできずその理解に苦しみ、やっとローカルでのテストでできることが確認できたにもかかわらず、本番環境では アップロードエラーやそれによりアップロードしたファイルが複数(ファイル名_0,_1,_2など)作成されたり、ファイルのパーミッションがアップロー ド処理中に644から664に勝手にかわってしまったり、MediaBrowserに登録されると直接データベーステーブルからエントリを削除しないと削 除できなくなったりでてんてこまいな状態です。おそらくサーバ側(Apache)の設定に影響されている部分があるのだと推測しています。
そんな中でD7にするとRewriteRuleがよくないらしくある条件でループが発生してしまっています。
ただ、必ずしもRewriteRuleが悪いわけでもなくファイルのパーミッションやファイルにEOL(End Of Line)がない場合も考えられるので、寄贈モジュールの動作が怪しい状況では何が原因で意図した動作をしないのかを調査するには敷居が高く感じ、D7を使えるという状態ではないように思えてきました。

とりあえず、それがD6に戻した理由です。

時間が経てば寄贈モジュールもどんどんよくなっていくでしょうから、それまではD7を想定したテーマをチューニングしていこうと思います。