エックスサーバーでサブドメイン名とサブディレクトリ名が同じ場合の解決方法
XSERVER に別サーバーで運営していたドメインを移そうと思いました。
以下のように、1つのドメインで3つの内容のものを運営しています。
XSERVERでは、「tips.outideoshigoto.com」のようなサブドメインを作成すると、「outideoshigoto.com」の直下に「tips」というディレクトリが作成されて、そこにアップしたものが「tips.outideoshigoto.com」として使われるようになります。
サーバーの仕様上、サブドメインとサブディレクトリ名が同じ場合、FTPサーバー上のデータのアップロード先が同じになるため、「www.outideoshigoto.com/tips」と「tips.outideoshigoto.com」のような運用はできないとのこと。
ただ、「.htaccess」などを使えば、技術的にはできるだろうということを教えていただきました。
(もちろん、サポート対象外ですが。。。)
「.htaccess」など、サーバー環境に関することは、あまり詳しくないのですが、やってみて、何とか問題なくできたので、参考まで。
- サーバーパネルでドメインを設定
サーバーパネルトップから「ドメイン設定」→「ドメインの追加」タブでドメイン名を入力
- サーバーパネルでサブドメインを設定
すでにサブディレクトリでアップされている場合には、サブドメインを作る前に、下記4.のようにファイル類を違うディレクトリに移行する必要があります。
サーバーパネルトップから「サブドメイン設定」→サブドメインを追加したいドメインで「選択する」をクリックし、「サブドメインの追加」タブでサブドメイン名を入力
- FTPソフトで、「tips.outideoshigoto.com (サブドメイン)」のファイル類を、サブドメイン名のディレクトリtipsに、アップロード
(この場合、outideoshigoto.com/public_html/tips/ ディレクトリ) - FTPソフトで、新しいディレクトリを作って「www.outideoshigoto.com/tips」のファイル類をアップロード
(今回は「tips2」という名前にしましたので、outideoshigoto.com/public_html/tips2/ にアップ)
この方法では3.と4.のアップロード先を逆にしてはダメ - ここまでで、「tips.outideoshigoto.com」と「www.outideoshigoto.com/tips2」をブラウザで確認。
- 「.htaccess」ファイルの作成
(新しく.htaccess を作る場合を想定しています。すでに.htaccess がある場合には消してしまわないようにご注意ください。)
メモ帳などで、以下の内容を入力し、「xxx.htaccess」というような名前で保存。
(Windowsなどでは、拡張子だけで名前のないファイルとみなされ「.htaccess」というファイルが作れないため)RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.outideoshigoto\.com$
RewriteRule ^(.*)$ /tips2/$1 [L]このファイルは「tips」ディレクトリにアップロードしますので、このファイルが実行されるときは、「www.outideoshigoto.com/tips/〇〇〇」か「tips.outideoshigoto.com/〇〇〇」の場合だけです。
2行目に書かれている内容では、「www.outideoshigoto.com/tips/〇〇〇」でこのフォルダ内にアクセスしようとしたとき、という条件文で、
3行目で「www.outideoshigoto.com/tips/〇〇〇」を「/tips2/〇〇〇」というURLに変えてブラウザに表示しなさい、というような意味になるのだそうです。
この時、ブラウザのアドレス欄に表示されるURLは、「www.outideoshigoto.com/tips/〇〇〇」のままです。
そして、2行目の条件文「www.outideoshigoto.com」ではない「tips.outideoshigoto.com」の場合は、3行目は実行されません。 - FTPで「xxx.htaccess」ファイルを「tips」ディレクトリにアップロードし、アップロードしたファイルを「.htaccess」と名前を変更
- (ドメインを追加した場合には、この後DNSの設定が必要になる)
これで、めでたく「https://tips.outideoshigoto.com/」は tips ディレクトリを、「https://www.outideoshigoto.com/tips/」は tips2 ディレクトリを表示してくれます。
現在、ルート(http://www.outideoshigoto.com/)の.htaccess で、http:// で入ってきたものを https:// に変換しています。
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
https://tips.outideoshigoto.com でも同じように常時SSL化するために、tipsディレクトリに、2行を追加しています。
というより、実際にはこの2行を入れないと、「http://www.outideoshigoto.com/tips/」と入力すると「https://www.outideoshigoto.com/tips2/」にブラウザのアドレス部分が変換されてうまくいきませんでした。
(本来、XServerの場合では上記のルートの.htaccessの書き方で、サブドメインも含めたすべてのドメイン内のものがhttps://にリダイレクトされます。)
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.outideoshigoto\.com$
RewriteRule ^(.*)$ /tips2/$1 [L]
両方のURLともWordpressで運用されていたとしても方法は同じです。
WordPressの一般設定の「WordPress アドレス (URL)」も「サイトアドレス (URL)」も「.htaccess」を気にすることなく、元のサーバーの状態のまま、
「http://tips.outideoshigoto.com/」と「http://www.outideoshigoto.com/tips」を記入します。
(インストールフォルダと表示フォルダが同じ場合)