背景・課題
Xserverでは、ドメインごとに公開ルート(document root)を任意のディレクトリへ変更できません。そのため、public_html 直下にファイルやディレクトリが混在しやすく、以下の問題が生じます。
- どれが本番サイトのデータか判別しにくい
- リニューアル時の切り替えやファイル整理に手間がかかる
- 誤って別用途のファイルを操作するリスクがある
解決策の概要
サイト本体をサブディレクトリに配置し、.htaccess で内部的にマッピングすることで解決できます。公開URLはルートのまま維持しつつ、実体ファイルだけを任意のディレクトリへ集約できます。
ディレクトリ構成例
/public_html/
├─ .htaccess
├─ tools/
├─ dev-tools/
└─ act3inc.com/
├─ index.php
├─ assets/
└─ ...
- アクセスURL:
https://act3inc.com/ - 実体パス:
/public_html/act3inc.com/
実装方法(.htaccess)
RewriteEngine On
RewriteRule ^$ act3inc.com/ [L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteCond %{REQUEST_URI} !^/act3inc\.com/
RewriteRule ^(.*)$ act3inc.com/$1 [L]
※ 上記は基本形です。存在しないURLへの404処理や、後述する /act3inc.com/〇〇 形式でアクセスされた場合の301リダイレクトは省略しています。この基本形のままだと、存在しないURLが404にならずソフト404になる場合があります。404処理を含めた改良版の構成は「Apache(.htaccess)の404トラブル切り分け」を参照してください。
サブディレクトリ運用時のURL正規化
この構成では、設定や参照方法によってサブディレクトリ名を含んだURLが生成される可能性があります。
たとえば https://act3inc.com/act3inc.com/contact/ のようなURLでアクセスされると、同一のページが複数URLで表示されてしまい、SEOやサイト運用の面で問題になります。
対応内容
重複URLを防ぐため、以下の2点を実施しました。
301リダイレクトによる正規化
/act3inc.com/〇〇 の形式でアクセスされた場合は、/〇〇 へ301リダイレクトします。
- 例:
https://act3inc.com/act3inc.com/contact/→https://act3inc.com/contact/
canonical タグの調整
HTMLに出力する canonical タグには、/act3inc.com を含まない正規URLのみを指定します。
実装時の注意点
- リダイレクト規則は、HTTPS強制・www統一などの転送処理の後、内部リライトの前に記述します。この順序にすることで、リダイレクトループや意図しない挙動を回避できます。
- 301リダイレクトを設定していても、外部リンク・キャッシュ・計測タグなどの影響で重複URLが一時的に発生する可能性があるため、canonical タグの併用は必須です。
まとめ
Xserverの仕様上、公開ルート自体は変更できませんが、.htaccess を使えばURLはルートのまま、実体ファイルをサブディレクトリに整理して管理できます。