エックスサーバーでは独自ドメインでサブドメインを設定すると、public_html内にサブドメイン名でディレクトリが作成される。その中身がサブドメインの内容として表示されるんだけど、ディレクトリにアクセスした時と同じ内容が表示されてしまう。
なんとなく気持ち悪いので問い合わせてみたけど、これを別々にする方法は用意されてないらしい。
(無理やり変える方法はあるようだけどとりあえず今回はそこまではやらない。)
やりたいことは、
- yzk.io/blog -> blog.yzk.io へのリダイレクト
- http -> https へのリダイレクト
の2つ。
エックスサーバーのサーバーパネルに「サイト転送設定」というのがあるので、まずそれでやってみる。
ここではどうもドメイン配下の任意のディレクトリから任意のURLへの転送のみのよう。
とりあえず /blog -> https://blog.yzk.io に設定。
.htaccessファイルを見ると、
Redirect permanent /blog https://blog.yzk.io
となっている。さっきの転送設定は.htaccessの簡単設定という感じなのね。
あとはhttpsへのリダイレクトだけど、サーバーパネルからはできないっぽい。
ググってみると、以下のソースを.htaccessにコピペしろと。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
さっきの Redirect permanent と書き方が違う。
何が違うんでしょう。
.htaccessによるリダイレクト徹底解説 | Cherry Pie Web
なるほど。
- Redirect はリダイレクト先の指定にhttp~からの絶対パスが必要
- mod_rewrite のほうが柔軟な指定ができる
- Redirectはサーバー標準の機能だが、mod_rewriteはインストールされていないと使えない
まあ今どきのサーバーなら大抵入っているでしょう。エックスサーバーでも当然使えました。
設定画面からはサブドメインの設定はできないらしい。
.htaccessはサブドメインごとに設定しないといけないので、blogフォルダ内の.htaccessを自分でいじると。
そんな感じで以下のような設定に。
ルート
Redirect permanent /blog http://blog.yzk.io
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
サブドメイン
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
これで大丈夫かなー😇