Ikeda's Blog

mixhostで、複数ドメイン運用かつ、メインドメインのドキュメントルートを変更する

そもそもの問題

mixhostでは、メインドメインのドキュメントルートは、「/public_html」で固定です。
そして、別ドメインを作った場合のドキュメントルートは、「/public_html」にディレクトリを作る形になります。
複数ドメインで運用しようとした時、これだと非常にわかりづらい。

public_html
┣ app
┣ config
┣ database
┣ public
┣ new.domain.site
┃ ┣ app
┃ ┣ config
┃ ┣ database
┃ ┣ public
┃     :
┃     :
┣ .env
    :
    :

更に、メインドメインも別ドメインもLaravel使いました、なんて場合だと、.htaccessが更にややこしいことになりました。

やりたいこと

public_html
┣ main.domain.site
┃ ┣ app
┃ ┣ config
┃ ┣ database
┃ ┣ public
┃     :
┃     :
┣ new.domain.site
   ┣ app
   ┣ config
   ┣ database
   ┣ public
       :
       :

実現方法

「/public_html/.htaccess」を作成し、以下のようにします。
※メインドメインをmain.domain.siteとしていますので、適宜読み替えてください。

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{HTTP_HOST} main.domain.site
RewriteCond %{REQUEST_URI} !(^/main.domain.site)
RewriteRule ^(.*)$ main.domain.site/$1 [L]
</IfModule>
  • ドメインがmain.domain.siteであり
  • main.domain.siteディレクトリ以下でないなら

→main.domain.siteディレクトリ下に飛ばす
という動きになります。

「RewriteCond %{HTTP_HOST} (main.domain.site)」を書く理由

この行がない場合、別ドメイン「new.domain.site」でのアクセス時にも、このルールが適用されてしまいます。

public_html
┣ new.domain.site
┃ ┣ main.domain.site
┃ ┃ ┣ index.html
           :
           :

みたいになる。
それは困るので、あくまでメインドメインでのみ行うようにするため、記述します。
これに気付くのに時間がかかった。