WordPress サイトアドレス変更後のリダイレクト設定

前回は、 WordPress のサイトアドレスを変えることで、サイトのトップページでサブフォルダの WordPress のフロントページを表示できるようになりました。
具体的には https://compota-soft.work/wp1 ではなく https://compota-soft.work でフロントページを表示できるようになりました。

新しく設定したサイトアドレスでアクセスするとトップページに WordPress のフロントページが表示されました。

しかし、サイトアドレスが変わると、それに準じて、記事の URL も変わってしまいます。
「別に新しい URL でアクセスすればいいから問題ないよ」という考え方もありますが、いままで記事の中に貼ってきたサイト内リンクは無効になっているし、いままでツイッターでお知らせしてきた URL が使えなくなるのもちょっと残念です。

そこで、今回は .htaccess を使って、サイトアドレス変更前の URL を変更後の URL に転送するリダイレクトの設定を行います。
詳細は省き「こうやったらうまくいったよ」という紹介をします。コードの利用は自己責任でお願いします。
※Wordpress 6.1.1、PHP 7.4.33、chrome  110.0.5481.105 です。

サイトアドレスの変更で記事の URL も変更された

前回、Wordpress フロントページをサイトのトップページに表示するためにサイトアドレスを変えました。
結果として記事の URL も同様に変わりました。

WordPress インストール先フォルダhttps://compota-soft.work/wp1
変更前のサイトアドレスhttps://compota-soft.work/wp1
サイトアドレス変更前
WordPress インストール先フォルダhttps://compota-soft.work/wp1
変更前のサイトアドレスhttps://compota-soft.work
サイトアドレス変更後

サイトアドレスをサブディレクトリからルートディレクトリに変えています。
これにともなって、公開済みの記事の URL も以下のようにかわりました。

変更前の記事の URLhttps://compota-soft.work/wp1/archives/2509
変更後の記事の URLhttps://compota-soft.work/archives/2509
サイトアドレス変更前後の記事の URL

今回はこの変更前の記事の URL でアクセスした場合に変更後の URL に転送するリダイレクトの設定を .htaccess で行った事例を紹介します。
※記事が archives という固定のサブディレクトリに入っている部分を利用しているので、日付など固定ではないパーマリンク構造の場合は、今回紹介するコードをそのまま適用することはできません。

WordPress の .htaccess ファイルをダウンロード

ここから、具体的に .htaccess を変更して、記事 URL のリダイレクト設定を行います。
※試行錯誤の結果、正常にリダイレクトしサイトを表示できましたが、使用する際は自己責任でお願いします。

WordPress インストール先ディレクトリの .htaccess ファイルをローカルにダウンロードします。
その後、ダウンロード元のサーバの .htaccess はリネームなどにより無効化します。
これは、.htaccess が複数の階層にあり、同じ要素で矛盾が生じた場合、下位ディレクトリの設定が優先されるためです。
参照:.htaccessの適応範囲と優先順位

WordPress インストール先フォルダの .htaccess をローカルにダウンロードし、その後サーバの .htaccess をリネームして無効化します。

.htaccess を編集する前にバックアップをおすすめします。

コードの編集

.htaccess をテキストエディタで開き次のように編集します。
※一番最初のブロックはさくらのレンタルサーバを利用しているために付加されたもののようです。

# BEGIN Force SSL for SAKURA
# 常時HTTPS化(HTTPSが無効な場合リダイレクト)
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} !on
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
# END Force SSL for SAKURA
# BEGIN SAKURA Internet Inc.
<IfModule mod_deflate.c>
    SetOutputFilter DEFLATE
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE application/x-javascript application/javascript application/ecmascript
</IfModule>
<IfModule mod_expires.c>
    ExpiresActive On
    <FilesMatch "\.(css|js)$">
        ExpiresDefault "access plus 1 week"
    </FilesMatch>
    <FilesMatch "\.(gif|jpe?g|png)$">
        ExpiresDefault "access plus 1 month"
    </FilesMatch>
</IfModule>
# END SAKURA Internet Inc.

# BEGIN SakuraCrowd Setting of Redirect
# これはさくらくらうどの個人的に設定したリダイレクト設定です。
# サブディレクトリ wp1 の記事を上位のルートディレクトリで
# 表示するために WordPress のサイトアドレスを変更しました。
# 古い URL でも記事を表示するためのリダイレクトです。
# 自己責任でお使いください。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp1/archives/(.*)$ /archives/$1 [R=301,L]
</IfModule>
# END SakuraCrowd Setting of Redirect

# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

変更点は以下です。

  • 26~37行目に独自の行を追加
  • 46, 50 行目の変更

46 行目の変更内容は以下です。

  • 変更前 RewriteBase /wp1/
  • 変更後 RewriteBase /

50 行目の変更内容は以下です。

  • 変更前 RewriteRule . /wp1/index.php [L]
  • 変更後 RewriteRule . /index.php [L]

46, 50 行目の変更は、.htaccess の置き場所が上位のディレクトリに移動していることに対応した修正だと思います。
参照:【ルートディレクトリの変更】サブディレクトリ(/wp/)にインストールしたWordPressをドメイン直下に表示させる方法! | 知りたいねっと

archives など記事特有のディレクトリ名がない場合は使えません

追加した行については筆者がネットで調べながら書いたものです。
詳細は別の記事で紹介しますが、次の行については少し説明します。
特に変更する気がない場合は読む必要はありません。

RewriteRule ^wp1/archives/(.*)$ /archives/$1 [R=301,L]

archives という文字列が、転送元 URL と転送先 URL の正規表現に使われています。
これはサイトの記事の URL を決定するパーマリンク構造に archives という文字列が含まれている特徴を利用しています。

もしも、これを次のように変更して archives がない URL でも対応しようとすると、記事の URL だけではなく、画像などの変更してはいけない URL まで置き換えられてしまい、記事の表示が著しく崩れます。

RewriteRule ^wp1/(.*)$ /$1 [R=301,L]

ウェブブラウザの URL 欄に https://compota-soft.work/wp1/archives/2509 と入力した後、 .htaccess に追加した RewriteRule ディレクティブにより URL は https://compota-soft.work/archives/2509書き換えられました。
しかし、 wp1 フォルダに格納されている、記事の中で使っている画像ファイルなどの URL も書き換えられてしまい、画像も表示されず、恐らく css なども見つからないのかデザインも変わっています。

リダイレクトはできましたが .htaccess の RewriteRule により画像のURLまで変更され WordPress の記事の表示が崩れました。

編集した .htaccess のアップロード

先ほど編集を行った .htaccess をルートディレクトリにアップロードします。
※すでにルートディレクトリに .htaccess がある場合、バックアップをとりましょう。

リダイレクトと表示のテスト

これで、リダイレクトの設定の変更は完了しました。
古い URL から新しい URL へリダイレクトされ、記事が正しく表示されるかテストします。

.htaccess を変更後、必ずウェブブラウザのキャッシュを削除してください。
筆者の場合は、chrome で閲覧履歴、ダウンロード履歴、キャッシュされた画像とファイルの項目を削除してテストしました。
多分、キャッシュされた画像とファイルの項目だけでも良いと思います。
これを削除しないと、以前の .htaccess が参照されるのか、変更が反映されません。

.htaccess をアップロードし変更した後は、テストの前にウェブブラウザのキャッシュを削除します。

その後、ウェブブラウザで記事の古い URL でアクセスします。
新しい URL にリダイレクトされ、記事がきちんと表示されれば、リダイレクト設定完了です。※wp1/archives/ が含まれていることが転送元 URL の条件なので、以前のフロントページの URL である https://compota-soft/wp1 にアクセスしてもリダイレクトはされません

WordPress のサイトアドレスを変更すると公開済みの記事の URL も変更されます。リダイレクトにより転送できます。

WordPress プラグイン Redirection によるリダイレクト

.htaccess でリダイレクトがうまくいかない場合、記事の量に応じて手間がかかりますが、Wordpress のプラグイン「Redirection」を使ってリダイレクトの設定を行う方法もあります。
プラグイン Redirection によるリダイレクト設定については以前の記事を参照して下さい。

まとめ

今回は、前回行った WordPress のサイトアドレスの変更に伴う、記事 URL の変更に対応するため、.htaccess を編集して、古い URL から新しい URL へ転送し記事を表示するリダイレクト設定の事例を紹介しました。

参照サイト Thank You!

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました