ブログを独自ドメイン化
今までこのブログはロリポップサーバの無料ドメイン(●●●.lolipop.jpなど)を使って運営していました.しかし,今回ブログをSSL化するにあたって独自ドメイン(●●●.comなど)を導入することになりました(ロリポップのドメインでSSL化はできない).
この更新によりブログのURLもhttp://kobazlab.main.jp から https://kobazlab.tech に変更になりました.
旧ドメイン:kobazlab.main.jp
新ドメイン:kobazlab.tech
ブログを独自ドメインに変更・SSL化させ,最後の仕上げとして旧ドメインのリンクを新ドメインにリダイレクトさせるのが今回の目標です.
リダイレクトの方針
kobazlab.main.jp/xxx~ の形のリンクでアクセスされたものをkobazlab.tech/xxx~(=kobazlab.main.jp/wordpress/xxx~) にリダイレクトさせることが目標です.
旧リンクの構成
サーバ上にwordpressを設置する場合,普通はroot直下ではなく,wordpressフォルダ内にインストールすると思います.このようにwordpressで立ち上げたwebサイトはexample.com/wordpress でアクセスできます.これをドメイン名(example.com)だけでそのwebサイトにアクセスさせるようにできます.
現在サーバの構成はこのようになっています.
1 2 3 4 5 |
Kobazlab.main.jp |--wordpress (kobazlab.tech) |--figures |--etc. |
例によってこのサイトもhttp://kobazlab.main.jp/wordpress ではなくhttp://kobazlab.main.jp だけでアクセスできるように設定してありました.
→ wordpressをルートディレクトリでアクセス可能にする。
そのため,wordpressで作成したブログ自体はkobazlab.main.jp/wordpress 以下に存在していますが,見かけ上のリンクはすべてhttp://kobazlab.main.jp/xxx~
というような形になっています.
この見かけ上のリンクをリダイレクトするのが今回の目標になります.
ループの発生
kobazlab.main.jp(ルートドメイン)にあったアクセスをそのままkobazlab.techにリダイレクトするため,.htaccessをこのような設定にしました.
1 2 |
Redirect permanent / https://kobazlab.tech |
しかし,リダイレクトの無限ループが発生しました.
- 現在のディレクトリ構成
1 2 3 4 5 6 |
Kobazlab.main.jp |--.htaccess |--wordpress (kobazlab.tech) |--figures |--etc. |
なぜ今回無限ループが発生したかというと
1. まず初めにkobazlab.main.jp上の.htaccessを実行
2. kobazlab.main.jp/wordpress にリダイレクト
3. wordpress内の.htaccessを実行
4. 次にwordpressの上層のkobazlab.main.jpの.htaccessを実行
5. kobazlab.main.jp/wordpress を kboazlab.main.jp/wordpress/wordpress にリダイレクト
6. 以下3~5を繰り返す
つまり,kobazlab.main.jp/wordpress へのリダイレクトによりkobazlab.main.jpの.htaccessの処理が行われ,再びkobazlab.main.jp/wordpress へリダイレクトされ,それがループしたということになります.
リダイレクトの再実装
.htaccessファイルの編集
始めに実装したRedirect permanent
によるリダイレクトは転送元のアドレスにアクセスがあった場合,転送先のアドレスにリダイレクトします.しかし,この方法ではでは前述した無限ループに陥ってしましました.
無限ループの原因は内部的にkobazlab.techとkobazlab.main.jp/wordpress が同じであることが原因でした.
そこで,アドレスの一致(アドレスの外見)で判定するような設定を.htaccessに追加します.
1 2 3 4 5 6 |
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{http_host} ^kobazlab.main.jp RewriteRule ^(.*)$ https://kobazlab.tech/$1 [R=301,L] </IfModule> |
この設定は,正にkobazlab.main.jp
というアドレスでアクセスされたものを全てkobazlab.tech
に書き換える(リダイレクトさせる)方法です.この方法を用いることで無限ループを回避することができます
例外の設定
しかし,今のままではkobazlab.main.jp/~ でアクセスされたものをすべてkobazlab.tech(wordpressフォルダ)にリダイレクトしてしまいます.例えば今回の構成ではブログ用の画像を保管しているkobazlab.main.jp/figures にアクセスしたい場合にもkobazlab.tech/figures (存在しないディレクトリ)にアクセスしてしまいます.
そこで,kobazlab.main.jp/figures にアクセスされた場合はリダイレクトしない設定を追加します.
1 2 3 4 5 6 7 |
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{http_host} ^kobazlab.main.jp RewriteCond %{REQUEST_URI} !(^/figures/) RewriteRule ^(.*)$ https://kobazlab.tech/$1 [R=301,L] </IfModule> |
これでfiguresディレクトリへのアクセスは例外的にリダイレクトされず,kobazlab.main.jp/figures/xxx でアクセスすることができます.
これでブログの情報がすべて前と同じようにアクセスできるようになりました.
参考サイト
https://www.cherrypieweb.com/weblog/technical/20131017121752.php
https://hostingstock.net/article/lolipop_jp/change-wordpress-domain/