[PR] 本記事にはプロモーションが含まれています。

【WordPress】Redirectionでルールを転送から410に変えても、前のままだった|SQLで確かめて書き換える

画面で変えたはずのルールが、データベースでは前のままになっている様子を表したイラスト Plug-in

【2026年10月20日時点の情報です】

このブログでは、古い記事のURLの転送に、WordPressのプラグイン「Redirection」を使っています。

2026年10月16日、302で一時的に転送していたルールを、410(もうないページ)に変えようとしました。ところが、画面で直したはずなのに、確かめると302のままでした。やり方を変えて何度か直しても、ルールは前のままでした。

最後は、データベースのルールをSQLで確かめて、控えを取ってから直接書き換えました。この記事では、そのときの手順をまとめます。

場面1:302のルールを、410に変えることにした

このブログには、Laravelの記事がまとまってありました。そのうちの何本かは、前に下書きにして、1つのルールで、別のLaravelの記事 /laravel-development-flow-xampp/ へ302(一時的な転送)で送っていました。Redirectionは、登録したルールごとに ID という番号を付けています。このルールの ID は15なので、この記事では「ID 15 のルール」と書きます。

この日、残っていたLaravelの記事もすべて下書きにしたので、転送先の記事もなくなります。そこで、ID 15 のルールを次のように変えることにしました。

No.項目前後
1対象のURLLaravelのアプリの連載など、名前を並べた正規表現laravel で始まるURLすべてなどに広げた正規表現
2動き/laravel-development-flow-xampp/ へ302で転送410を返す

あわせて、Laravelの別の記事へ301で転送していた2つのルール(ID 20 と 21)も、ID 15 のルールでまとめて410にするので消すことにしました。

場面2:画面で直したのに、前のままだった

Redirectionの画面で、ID 15 のルールを開いて対象のURLと動きを変え、2つのルールも消すつもりで作業しました。そのあと、6つのURLで返事の番号を確かめました。

Bash
for s in laravel-development-flow-xampp laravel-app-setup form-request vscode-cline laravel-named-routes-guide laravelactingas; do echo -n "$s "; curl -sI "https://softdev-learn.cc/$s/" | head -1 | tr -d '\r'; echo; done

結果の例:

Plaintext
laravel-development-flow-xampp HTTP/2 404
laravel-app-setup HTTP/2 302
form-request HTTP/2 404
vscode-cline HTTP/2 302
laravel-named-routes-guide HTTP/2 301
laravelactingas HTTP/2 404
  • for s in …; do …; done:
    並べた6つの名前について、順番に同じ処理をくり返す。$s に1つずつ名前が入る
  • echo -n “$s “:
    名前を、改行せずに出す(あとに返事の番号が続く)
  • curl -sI:
    ページの中身は取らずに、返事の見出しだけを取る
  • head -1:
    見出しの1行目(HTTP/2 410 などの行)だけにする
  • tr -d ‘\r’:
    行の終わりに付いている見えない文字(\r)を消して、表示がくずれないようにする

410になるはずのURLが、302や301のままでした。404になっているのは、記事を下書きにしたので「見つからない」になっているだけで、ルールの410はまだ効いていません。

そこで、ルールが入っているテーブル(wp_redirection_items)を、SQLで直接見ました。

Bash
sudo mysql wordpress -e "SELECT id, url, action_type, action_code, regex, action_data FROM wp_redirection_items WHERE url LIKE '%laravel%' OR url LIKE '%vscode-cline%' OR action_data LIKE '%laravel%';"

結果の例:

Plaintext
+----+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+-------------+-------+-----------------------------------------+
| id | url                                                                                                                                                                     | action_type | action_code | regex | action_data                             |
+----+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+-------------+-------+-----------------------------------------+
| 15 | ^/(laravel-app-(setup|db|product|list|edit|delete|cert|bootstrap|deply)|laravel-cat-create|laravel-shop|vscode-cline|vscode-cline-shop|twittermodoki-(dep|manpower))/?$ | url         |         302 |     1 | /laravel-development-flow-xampp/        |
| 20 | /laravel-named-routes-guide/                                                                                                                                            | url         |         301 |     0 | /laravelurl-route-helper/               |
| 21 | /laravel-routing-controller-guide/                                                                                                                                      | url         |         301 |     0 | /laravel-routing-controller-view-guide/ |
+----+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+-------------+-------+-----------------------------------------+
  • action_type:
    url なら別のURLへ転送する、error ならエラー(410など)を返す
  • action_code:
    返す番号(302、301、410など)
  • regex:
    1 なら正規表現のルール
  • action_data:
    転送先のURL
  • WHERE url LIKE ‘%laravel%’ OR …:
    対象のURLか転送先に「laravel」などを含むルールだけを出す

いちばん左の id の列が、ルールの ID です。ID 15・20・21 の3つとも、作業する前のままでした。

場面3:やり方を変えても、ID 15 のルールだけは変わらなかった

消すだけの2つのルール(ID 20 と 21)は、SQLで消しました。

Bash
sudo mysql wordpress -e "DELETE FROM wp_redirection_items WHERE id IN (20, 21);"
  • DELETE FROM wp_redirection_items:
    Redirectionのルールを消す
  • WHERE id IN (20, 21):
    ID 20 と 21 の2つだけを対象にする

こちらは、SQLで見るとすぐに消えていました。

ID 15 のルールは、もう一度画面で直したり、410のルールを新しく作ってから古いほうを消す方法も試したりしました。それでもSQLで見ると、ID 15 のルールは302の転送のままで、新しい410のルールもできていませんでした。

画面で保存されなかった理由は、分かっていません。

場面4:控えを取ってから、SQLで書き換えた

画面では変わらないので、ID 15 のルールをSQLで直接書き換えることにしました。その前に、戻せるようにこの1行だけの控えを取りました。

Bash
sudo mysqldump wordpress wp_redirection_items --where="id = 15" > ~/work/redirection-rule15-backup-20261016.sql
  • mysqldump wordpress wp_redirection_items:
    Redirectionのルールのテーブルを、作り直せる形で書き出す
  • –where=”id = 15″:
    ID 15 のルールの1行だけを書き出す

控えを取ってから、ID 15 のルールを書き換えました。

Bash
sudo mysql wordpress <<'SQL'
UPDATE wp_redirection_items
SET url = '^/(laravel[a-z0-9-]*|form-request|vscode-cline[a-z-]*|twittermodoki-(dep|manpower))/?$',
    action_type = 'error',
    action_code = 410,
    action_data = ''
WHERE id = 15;
SELECT id, url, match_url, action_type, action_code, action_data, regex FROM wp_redirection_items WHERE id = 15\G
SQL
  • <<‘SQL’ 〜 SQL:
    間に書いたSQLを、まとめて mysql に渡す。’SQL’ と引用符で囲むと、正規表現の | や $ を、シェルが別の意味に取らない
  • SET url = ‘…’:
    対象のURLを、新しい正規表現に変える
  • action_type = ‘error’, action_code = 410:
    転送をやめて、410を返すようにする
  • action_data = ”:
    転送先のURLを空にする
  • WHERE id = 15:
    ID 15 のルールだけを書き換える
  • SELECT … \G:
    書き換えたあとの ID 15 のルールを、1項目ずつ縦に並べて出す

結果の例:

Plaintext
*************************** 1. row ***************************
         id: 15
        url: ^/(laravel[a-z0-9-]*|form-request|vscode-cline[a-z-]*|twittermodoki-(dep|manpower))/?$
  match_url: regex
action_type: error
action_code: 410
action_data: 
      regex: 1

今度は、思ったとおりに変わっていました。

場面5:6つのURLで410を確かめた

場面2と同じコマンドで、もう一度確かめました。

Bash
for s in laravel-development-flow-xampp laravel-app-setup form-request vscode-cline laravel-named-routes-guide laravelactingas; do echo -n "$s "; curl -sI "https://softdev-learn.cc/$s/" | head -1 | tr -d '\r'; echo; done

結果の例:

Plaintext
laravel-development-flow-xampp HTTP/2 410
laravel-app-setup HTTP/2 410
form-request HTTP/2 410
vscode-cline HTTP/2 410
laravel-named-routes-guide HTTP/2 410
laravelactingas HTTP/2 410

6つとも410になりました。

まとめ

Redirectionの画面でルールを直しても、保存されていないことがありました。今回は、転送のルールをエラー(410)に変えようとして、何度直しても前のままでした。前の日にも、410のルールを画面で転送に変えようとしたあとにSQLで見ると、ルールは410のままでした。

画面で直したあとに転送が思ったとおりにならないときは、まずSQLでルールの中身を確かめると、「直したつもりで、実は変わっていない」ことがすぐに分かります。SQLで書き換えるときは、先にその行だけの控えを取っておくと、まちがえても戻せます。

前の日のことは、Redirectionで301を足しても410のままだった記事にまとめています。SQLの書き方(UPDATE や DELETE の意味)は、データベースのコマンドの記事で説明しています。WordPressのプラグインのほかの記事は、Plug-inのカテゴリーにあります。

ほかの開発・プログラミングの記事は、開発・プログラミングメモの目次から、テーマ別に探せます。

このブログは、にほんブログ村と人気ブログランキングに参加しています。記事が役に立ったら、下のランキングのバナーのどれかを押して応援してもらえると励みになります。

ブログランキング・にほんブログ村へにほんブログ村

サーバー構築・運用ランキング プログラムランキング

Plug-inWordPress
watasoftdevをフォローする

コメント