サブドメインに変更と301リダイレクト

サブドメインに変更と301リダイレクト

2025年5月31日 【ホームページ制作/WordPress】タグ: ,  更新日:2025年6月6日

上のメニューでリンクしているサブディレクトリで運用していた三つのサイト(ワードプレスで作成)をサブドメインに変更してリダイレクトしたので覚書き。

これらの一連の作業は何度か行っているが、たまにしかしないので忘れてしまい、そのたびに調べながらの繰り返しなので。

サブドメインに変更

サーバーはさくらのレンタルサーバー。
これまでのサブフォルダ名をサブドメイン名に。
公開フォルダは元のサブフォルダ。
WordPressのインストール場所は変わっていないのでデータベースはそのまま。
WordPressの管理画面の設定-一般でWordPress アドレス (URL)とサイトアドレス (URL)を変更。これでデータベースのoptionsのsiteurlとhomeも自動的に書き換わる。

次はSSL証明書の設定。
作ったばかりのサブドメインは名前解決していないのでしばらく待つ。
その後SSL設定。
設定しばらくはSSLが有効にならない。


301リダイレクト

サブドメインでサイトにアクセスできるようになったら次はリダイレクトの設定です。
WordPressはサブドメイン配下の/blog/フォルダにインストールしている。

下記内容の.htaccessファイルをメインドメインのフォルダ(サブトメインのあるフォルダと同列)に設置。
Apache は RewriteCond が直後の RewriteRule にしか適用されないため、RewriteCond をそのたびに書く

RewriteEngine On

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^kawasemi.club$ [NC]
RewriteRule ^kawaturi/(.*)$ https://kawaturi.kawasemi.club/$1 [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^kawasemi.club$ [NC]
RewriteRule ^outdoor/(.*)$ https://outdoor.kawasemi.club/$1 [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^kawasemi.club$ [NC]
RewriteRule ^umituri/(.*)$ https://umituri.kawasemi.club/$1 [R=301,L]

RewriteEngine On:mod_rewrite を有効にします。
RewriteCond %{HTTPS} on:HTTPSアクセスのみ対象(HTTPから来る場合もリダイレクトしたいなら削除してOK)。
RewriteCond %{HTTP_HOST} ^kawasemi.club$:ドメインが kawasemi.club のときだけ適用。
RewriteRule ^outdoor/(.*)$ https://outdoor.kawasemi.club/$1:/outdoor/ 以下のパスやファイルも新しいサブドメインに引き継ぎ。
$1は前方の一つ目の括弧を参照。

このリダイレクトで配下のファイルはリダイレクトできたがWordPressはリダイレクトできなかった。

次は/blog/フォルダ(wp-adminなどのあるフォルダ)に別の.htaccessファイルを置く。

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(www\.)?kawasemi\.club$ [NC]
RewriteCond %{REQUEST_URI} ^/umituri/blog/
RewriteRule ^(.*)$ https://umituri.kawasemi.club/blog/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^(www.)?kawasemi.club$
→ 元のドメインが kawasemi.club(または www.kawasemi.club)である場合のみ適用。

RewriteCond %{REQUEST_URI} ^/umituri/blog/
→ アクセスされたパスが /umituri/blog/ の場合にマッチ。

RewriteRule ^(.*)$ https://umituri.kawasemi.club/blog/$1 [R=301,L]
→ サブドメイン umituri.kawasemi.club/blog/ にリダイレクト(末尾も含めて)。

(.*) は「任意の文字列をすべてキャプチャ」する正規表現。
$1 は、そのキャプチャした内容を参照して付け加えるための「プレースホルダー」。
.htaccessはその置かれたフォルダが基準になるのでこのRewriteRuleの場合(.*)に入るのはファイル名のみ。もし一つ上のフォルダに.htaccessを置く場合は^blog/(.*)$とすれば同じ結果が得られる。

301リダイレクトの確認方法

301リダイレクトが成功しているかどうかはブラウザでURLを打って試せば良いが、キャッシュが残っていたりしてリダイレクトが作動せず、それを記述間違いと勘違いし、コードを訂正してしまうとややこしくなることもあるので次の方法なら確実。

コマンドプロンプトでcurl -I https://kawasemi.club/yacho/を実行
上がリダイレクトしていない通常に表示された場合。
200 OKと表示される。
下がリダイレクトが有効になっている場合。
301 Moved Permanenyと表示される。

PowerShell 7.5.1
PS C:\Users\****> curl -I https://kawasemi.club/yacho/
HTTP/1.1 200 OK
以下省略


301リダイレクト成功
PS C:\Users\****> curl -I https://kawasemi.club/yacho/
HTTP/1.1 301 Moved Permaneny
以下省略

AIによると.htaccessにHeader set Cache-Control “no-store, no-cache, must-revalidate”と追記すればキャッシュされないみたいだがこれは試していない。

まず滅多に行わないリダイレクト設定ですが、それでもこれまでで結構な回数になります。正規表現があるのでこれがややこしさを増していて毎度毎度こんがらがってしまいます。おまけにキャッシュが邪魔をするので訳が分からなくなります。しかし毎回何とか動くようになり、理解できたわけでもないのに中途半端に終わっているので今回少し理解を進めるために覚書にしました。
次回リダイレクト設定するときはスムーズに対応したいものです。

関連記事