【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 | 対象のURL | Laravelのアプリの連載など、名前を並べた正規表現 | 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で返事の番号を確かめました。
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結果の例:
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で直接見ました。
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%';"結果の例:
+----+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+-------------+-------+-----------------------------------------+
| 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で消しました。
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行だけの控えを取りました。
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 のルールを書き換えました。
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項目ずつ縦に並べて出す
結果の例:
*************************** 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と同じコマンドで、もう一度確かめました。
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結果の例:
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 4106つとも410になりました。
まとめ
Redirectionの画面でルールを直しても、保存されていないことがありました。今回は、転送のルールをエラー(410)に変えようとして、何度直しても前のままでした。前の日にも、410のルールを画面で転送に変えようとしたあとにSQLで見ると、ルールは410のままでした。
画面で直したあとに転送が思ったとおりにならないときは、まずSQLでルールの中身を確かめると、「直したつもりで、実は変わっていない」ことがすぐに分かります。SQLで書き換えるときは、先にその行だけの控えを取っておくと、まちがえても戻せます。
前の日のことは、Redirectionで301を足しても410のままだった記事にまとめています。SQLの書き方(UPDATE や DELETE の意味)は、データベースのコマンドの記事で説明しています。WordPressのプラグインのほかの記事は、Plug-inのカテゴリーにあります。



コメント