以前にも
・www有無
・常時SSL化の際にhttpからhttpsへのリダイレクト
に関する記事を書いています。
しかしこの度、エックスサーバーにて新しいサブドメイン(www以外)を設定した時に.htaccessの記述内容が原因で、サブドメインの設定がうまくいかなかったので修正しました。
エックスサーバーは国内シェアNo.1のレンタルサーバーです。
エックスサーバーでできること、スペック・機能を知りたい場合はこちらの記事をどうぞ。
公式https://www.xserver.ne.jp/lp/service01/
参考エックスサーバー使用歴10年以上。使ってわかったメリット・デメリット
エックスサーバーでのサブドメイン設定
まず、エックスサーバーでサブドメインのディレクトリ構造について。
例えばtest.example.com
というexample.com
のサブドメインtestを設定するとディレクトリは以下のようになります。
/public_html/example.com/test/
example.com
のディレクトリの直下にtest
というディレクトリが生成されます。
このtest
ディレクトリにデータをアップすると、https://test.example.com/
で表示されます。
しかし、このままの状態だと
https://example.com/test/
でもアクセスできてしまいます。そのためtest.example.comでのみアクセスされるように.htaccessを設置します。
.htaccessを設置するのは、testディレクトリです。
SetEnvIf Host "^test.example.com$" host
order deny,allow
deny from all
allow from env=host
test.example.com
の部分は任意のドメインに書き換えます。
エックスサーバーではサブドメインの作成時にSSLの設定も同時にできますが、SSL設定が失敗した場合は手動でもう一度設定する必要があります。
また、サブドメインを検索エンジンにクロールされたくない場合は、アクセス制限も必要です。
以上でサブドメインの設定は完了です。
参考記事[エックスサーバー]サブドメインでWordPressのテスト環境を用意する方法
詳しい設定方法はエックスサーバーのマニュアルにあります。
サブドメインでアクセスできない
エックスサーバーでサブドメインを設定すると長くて1時間程度で設定が有効になります。
でもいくら時間がたっても、サブドメインにアクセスすると
https://example.com/test
に飛ばされてしまう。。。。
原因は.htaccessの設定
正常に表示されない原因は既に設置していた.htaccessの転送設定でした。
.htaccessには、wwwありに統一、httpはhttpsにリダイレクトする記述をしていました。
修正前の.htaccess
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*) https://www.example.com/$1 [R=301,L]
これを以下の記述に修正します。
修正後の.htaccess
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
これでサブドメインでアクセスすることができる様になりました。。。。
もっとスマートに.htaccessに記述する方法
上記の記述でも問題はないのですが、ドメインが変わればその度に書き直さないといけないということになります。
もっと汎用的にするには以下のように記述します。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
www無しかつ、httpからhttpsへリダイレクトするのは以下にようにします。
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
これなら汎用的で、ドメインごとに書き換えなくてすみますね。
エックスサーバーは国内シェアNo.1のレンタルサーバーです。
エックスサーバーでできること、スペック・機能を知りたい場合はこちらの記事をどうぞ。
公式https://www.xserver.ne.jp/lp/service01/
参考エックスサーバー使用歴10年以上。使ってわかったメリット・デメリット