レンタルサーバーで、ドキュメントルートをサブディレクトリに変更する

久しぶりにSSHが使えない格安レンタルサーバーを借りてみたら、ドキュメントルートを自由に変更できなかったので、.htaccessで無理やり変更する方法で対処しました。その時のメモです。

試したサーバー

  • スターサーバー:ライトプラン

初期設定とやりたいこと

スターサーバーの初期設定では、ドメイン名のディレクトリがそのドメインのドキュメントルートになっています。

- hogehoge.com
-- index.html

FTPでアクセスすると「hogehoge.com」ディレクトリの中にいる前提になっています。

ここに、サブドメインを設定すると、

- hogehoge.com
-- index.html
-- sub1.hogehoge.com
-- sub2.hogehoge.com

となり、サブドメインにアクセスした時には、そのドメイン名のディレクトリをドキュメントルートにするようになっています。

ただし、これだとルートドメインディレクトリの中にサブドメインのファイルがあってかなり気持ち悪い+セキュリティ的にどうなんだという気がするので、ルートドメインのドキュメントルートをwwwというディレクトリ移動させます。

- hogehoge.com
-- www  //-->hogehoge.comでアクセスがきた時
-- sub1.hogehoge.com  //-->sub1.hogehoge.comでアクセスがきた時
-- sub2.hogehoge.com  //-->sub2.hogehoge.comでアクセスがきた時

設定方法

SSHの使えないレンタルサーバーなので、残念ながら.htaccessのみで対処するしかありません。

ドキュメントルートにおく.htaccess

まずは、ドキュメントルートに以下の.htaccessファイルを設定します。

RewriteEngine on
RewriteBase /
RewriteRule ^$ www/ [L]
RewriteRule (.+)$ www/$1 [L]

アクセスされたら全てwww以下にリライトする設定です。

これだけでも、index.htmlの表示だけはできますが、「hogehoge.com/test.html」だったり「hogehoge.com/fuga/test.html」だったりにはアクセスができませんので、wwwディレクトリ側にも.htaccessファイルを設定します。

wwwディレクトリにおく.htaccess

続いて、wwwディレクトリにおく.htaccessファイルです。

RewriteEngine on
RewriteBase /www

ドキュメントルートをwwwディレクトリにするという記載のみです。

wwwディレクトリにおく.htaccessファイルにも、RewriteRuleを入れると書いてあるサイトもありますが、少なくともスターサーバーでは500エラーになります。

これで、「hogehoge.com/test.html」だったり「hogehoge.com/fuga/test.html」だったり、wwwディレクトリ以下のファイルを表示できるようになりました。

サブドメイン用のディレクトリにおく.htaccess

このままだと、ルートドメインはいいのですが、サブドメインにアクセスするとエラーになるので、対応します。

サブドメイン用のディレクトリに下記の.htaccessファイルを設置します。

RewriteEngine off

これで、エラーがなくなるはずです。

WordPressやLaravelのように、サブドメインでもRewriteEngineが必要な場合は、

RewriteEngine on
RewriteBase /sub1.hogehoge.com

とすれば、OKです。

おまけ

さて、SEOを考えるとwwwの有無は統一はしておきたいところ。また、最近は、ユーザービリティの面でもSSL化が必須ですし、SSLじゃないサイトはSEOが下がったりしますので、強制SSL化します。

実は、結構ここでハマりました。設定するディレクトリに注意してください。

ついでにwww有無を統一

ドキュメントルートの.htaccessを下記のように変更します。

RewriteEngine on

#以下を追記
RewriteCond %{HTTP_HOST} ^(hogehoge\.com)(:80)? [NC]
RewriteRule ^(.*) https://www.hogehoge.com/$1 [R=301,L]
#追記ここまで

RewriteBase /
RewriteRule ^$ www/ [L]
RewriteRule (.+)$ www/$1 [L]

上記の例は、wwwありに統一する場合です。

RewriteRuleの先がhttpsになっているのは、次にやる強制SSLに対応させるためです。

ついでに強制SSL

強制SSLにしないでも表示上は問題ありませんが、Googleはhttpとhttpsを別サイトとして見るようなので、SEOの観点からは強制SSLにしておいてマイナスはないと思います。

今回いじるのは、wwwディレクトリ直下の.htaccessファイルです。

RewriteEngine on
RewriteBase /www

#以下を追記
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R,L]
#追記ここまで

以上で、問題ないはずです。

ネットで調べると、サブドメインに対応するものはあっても、ルートドメインのドキュメントルートを変更する記事はほとんどなかったので、何かの参考になれば。。。

しかし、Apache周りの設定は意外とわかってなかったりするので、少し勉強になりました。