.htaccess でリダイレクトするために使ったRewriteRuleの説明

以前に、Wordpress のサイトアドレスを変更した際に、自作のリダイレクト用の処理を追加した .htaccess をルートディレクトリに配置しました。

今回は、そのときに .htaccess に追加したリダイレクト処理について説明します。
リダイレクト処理で用いた正規表現についても少し説明します。
※利用する場合は自己責任でお願いします。また、サーバのファイルを上書きする場合はバックアップをとっておくことを強く推奨します。
※Wordpress 6.1.1、PHP 7.4.33、chrome  110.0.5481.105 です。

.htaccess に追加した処理

WordPress インストール先フォルダの .htaccess をダウンロードし、次のような処理を追加しました。
# から始まる行はコメントです。

# 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

RewriteRule と書かれている行で、URL を古いものから新しいものに書き換えてリダイレクト処理を行っています。

RewirteRule の使用方法

RewirteRule は .htaccess で使うことができるディレクティブ(指示子)です。
あるパターンの URL 文字列を、別のパターンの URL 文字列に書き換えます。
パターンの表現には正規表現を用います。

RewriteRule を用いるには次のような手順を踏みます。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# RewriteRule の処理
</IfModule>

最初と最後の IfModule の囲いはおまじないだと思ってコピペしました。

RewriteEngine On は、これから RewriteRule を使いはじめるための準備です。

RewriteBase はこれから用いる相対パスの起点を絶対パスで表します。

今回は / なのでルートディレクトリが起点になります。
その後、# でコメントになっている部分に RewriteRule を用いて URL を変更します。

リダイレクト用の RewriteRule の追加

WordPress のサイトアドレスの変更により公開済みの記事の URL が変更されたので、変更前の URL でアクセスした場合に変更後の URL に転送する設定を RewiteRule ディレクティブを使って独自に追加します。

  • 変更前の URL 例 https://compota-soft.work/wp1/archives/123
  • 変更後の URL 例 https://compota-soft.work/archives/123

この置換のために RewriteRule ディレクティブを追加します。

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

まずは半角スペースで RewriteRule ディレクティブのパラメータを区切ると、次の3つに分けられます。

  • 転送元 URL を表す正規表現
  • 転送先 URL
  • フラグ

これらのパラメータをひとつずつ見ていきましょう。

転送元 URL を表す正規表現

^wp1/archives/(.*)$

これは転送元の URL を正規表現で表したものです。
正規表現は文字列のパターンを表現したもので、文字列が特徴と一致するか判別する際に利用されます。
今回はリダイレクトの対象となる転送元 URL としての特徴をもっているかを判別します。

転送元 URL の正規表現について

上図の (2) の wp1/archives/ は固定の文字列です。
この文字列が含まれていることが、この正規表現の特徴の一つです。

上図の (1) と (4)、先頭と末尾にある ^ と $ は、そのテキストの先頭と末尾を意味します。
^hoge とすることで、行の先頭が hoge から始まるというパターンを表現します。
piyo$ とすることで、行の最後が piyo で終わるというパターンを表現します。

上図の (3) の () の中身の .* は任意の文字が 0 個以上続いている文字列を表します。
これは後続の正規表現の文字列のパターンに一致するまで続きます。今回は末尾まで続きます。
. が任意の 1 文字、 * は次にマッチするまでの 0 個以上の文字列を表します。

() はグループ化です。これにより .* に該当した 0 文字以上の文字列が後方参照として $1 に格納され、あとで転送先の URL で使用することができます。
参照:.htaccess mod_rewriteによる正規表現を使ったリダイレクト設定

転送先 URL

/archives/$1

さきほどのグループ化 (.*) にマッチした具体的な文字列は後方参照として $1 に格納されます。
$1 は、その次のパラメータである転送先 URL の文字列を決める部分で利用できます。

正規表現によりマッチしたグループ化の部分は後方参照で $1 に格納されます。

たとえば、 wp1/archives/123 は、第一パラメータの正規表現 ^wp1/archives/(.*)$ にマッチしており、 (.*) は 123 の部分文字列に該当します。
この場合 $1 には 123 が格納され、第2パラメータの /archives/$1 は /archives/123 に置き換わります。

このようにして、パターンに当てはまった転送元 URL の中から、固定の文字列の部分以外を後方参照し あとで $1 を用いて活用することができます。

フラグ

[R=301,L]

フラグは、RewriteRule などのディレクティブの動作のオプションです。

R は Redirect を意味し、リダイレクトすることを示すフラグです。この後の処理は行いません。
R=301 とコードを指定でき、 301 は恒久的な転送・リダイレクトを行うことを意味します。

301恒久的な URL の変更のためのリダイレクト
302一時的な URL の変更のためのリダイレクト
リダイレクトコードの例
参照:HTTPステータスコードとは?SEO担当者向けに知っておくべきポイントを解説 【DIGIFUL】デジフル

L は Last を意味し、このディレクティブの条件にマッチした場合は、これ以降は処理しないことを意味します。

注意点

以前の記事でも警告したように、 archives/ を削除して、Wordpress インストール先フォルダ wp1 までの URL を置換元にしてしまうと、wp1/ が必要な記事の中の画像ファイルなどの URL も変わり、デザインが著しく崩れるので注意してください。

まとめ

今回は、以前に WordPress のサイトアドレス変更に伴い追加した .htaccess によるリダイレクト処理を説明しました。
.htaccess の変更はサイトの表示に大きな影響を与えるものなので、変更する場合は変更前のバックアップを必ずとり、自己責任で注意して行ってください。
筆者もあまり詳しくはありませんが、また必要があれば新しいディレクティブや機能を紹介します。

参照サイト 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をコピーしました