WordPressサイトのURLを整理し、末尾スラッシュ(/
)を統一したいという要望は多くあります。SEO上の観点からも、URLの一貫性は重要です。
その対策として、Redirectionプラグインを使ってスラッシュなしのURLを自動的にスラッシュ付きにリダイレクトする設定を行いました。
ところが、管理画面にアクセスできないという致命的な問題が発生。この記事では、その原因と対応策、そして最終的に採用した正規表現の設定について詳しく紹介します。
初期設定と問題の発生
Redirectionプラグインで設定した当初の正規表現は以下の通りです。
^/(?!sitemap\.xml$)(.+[^/])$
この設定の意図
sitemap.xml
を除外対象にしつつ、- その他のURLで末尾にスラッシュがついていないものを対象に、
- 末尾に
/
を追加してリダイレクトする
例えば:
/about
→/about/
/company/info
→/company/info/
一見問題なさそうですが、この設定を保存した直後からWordPressの管理画面に入れなくなる問題が発生しました。
実際に発生した問題
/wp-login.php
にアクセスできない(ログイン画面に入れない)/wp-admin/
にリダイレクトされるが、動作しない- SiteGuard WP Pluginなどで変更されたログインURL(例:
/secure/login_abc123
)にもスラッシュが勝手に付与され、ログイン処理が壊れる - ログアウト処理など、クエリ付きのURL(例:
?action=logout
)もリダイレクトされてしまう
これらはすべて、除外条件が足りなかったことが原因です。
修正後の正規表現
管理画面やログインURLを含めた除外を行うため、正規表現を以下のように修正しました。
^/(?!sitemap\.xml|wp-login\.php|wp-admin(?:/|$)|[^/]+/(?:signin_|login_)[\w-]+)(.+[^/])$
この設定のポイント
パターン | 内容 |
---|---|
sitemap\.xml | サイトマップを除外 |
wp-login\.php | ログイン画面を除外 |
wp-admin(?:/|$) | /wp-admin および /wp-admin/ を除外 |
[^/]+/(?:signin_|login_)[\w-]+ | 任意のディレクトリ内にある signin_ または login_ で始まるランダムなログインURLを除外 |
このように、管理画面やログイン機能を除外対象とすることで、通常のページはスラッシュ追加の対象となりつつ、重要な処理への影響を防げます。
Redirectionプラグインでの設定手順
項目 | 設定内容 |
---|---|
ソースURL | ^/(?!sitemap\.xml|wp-login\.php|wp-admin(?:/|$)|[^/]+/(?:signin_|login_)[\w-]+)(.+[^/])$ |
ターゲットURL | /$1/ |
マッチタイプ | 正規表現(Regex)にチェック |
まとめ
WordPressでURLの末尾スラッシュを自動で統一する設定は非常に便利ですが、管理系URLや認証用の特殊なURLに対して不用意にリダイレクトが働かないよう、除外ルールの設計が重要です。
今回の教訓をまとめると以下の通りです。
- WordPressの認証や管理画面へのアクセスパスは正規表現で明示的に除外すること
- SiteGuardなどでログインURLがランダムになる場合は、パターンで柔軟に除外する
- クエリ付きURLに対する挙動も確認し、必要なら
$
を外して対応する
コメント