概要
URL Redirectモジュールは、Drupalサイトで特定のユーザーまたはロールに対してURLリダイレクトを実行する機能を提供します。サイト管理者は、管理画面から複数のリダイレクトルールを設定し、条件に一致するユーザーがアクセスした際に自動的に別のページへ転送することができます。
このモジュールは設定エンティティを使用してリダイレクト情報を保存するため、設定のエクスポート/インポートにも対応しています。リダイレクト先として内部パス(node/addなど)や外部URL(https://example.comなど)を指定でき、フロントページへのリダイレクトもサポートしています。
ワイルドカード(*)を使用したパスパターンマッチングにも対応しており、複数のパスに対して一括でリダイレクトルールを適用することが可能です。また「条件の否定(Negate)」機能により、指定したユーザー/ロール「以外」のユーザーをリダイレクトすることもできます。
Features
- ユーザーまたはロールを指定してURLリダイレクトを設定可能
- 内部パスおよび外部URLへのリダイレクトをサポート
- ワイルドカード(*)を使用したパスパターンマッチング
- リダイレクト条件の否定(Negate)オプション - 指定したユーザー/ロール以外をリダイレクト
- リダイレクト時のメッセージ表示(有効/無効を選択可能)
- リダイレクトルールの有効/無効の切り替え
- 50件ごとのページネーションによるリダイレクト一覧表示
- 設定エンティティによるエクスポート/インポート対応
- 403エラー(アクセス拒否)ページからのリダイレクト対応
- 設定変更時のキャッシュ自動無効化
Use Cases
会員限定ページへの誘導
特定のロール(例:authenticated)を持つユーザーが旧URLにアクセスした際に、会員専用ページへ自動リダイレクトします。パス「/old-members-area」からパス「/members/dashboard」へのリダイレクトを設定し、authenticatedロールを選択することで実現できます。
管理者以外のユーザーをリダイレクト
Negate機能を使用して、管理者(administrator)ロール以外のすべてのユーザーを別ページへリダイレクトします。例えば、メンテナンス中のページへ一般ユーザーをリダイレクトしつつ、管理者はそのままアクセスできるようにする場合に有用です。
特定ユーザーのリダイレクト
特定のユーザーアカウント(例:テストユーザー、VIPユーザー)のみを専用ページへリダイレクトします。ロール単位ではなく個別のユーザーを指定できるため、細かなアクセス制御が可能です。
ワイルドカードによる複数パスのリダイレクト
パスにワイルドカード(*)を使用して、パターンに一致する複数のURLを一括でリダイレクトします。例えば「/old-section/*」というパターンを設定すると、/old-section/page1、/old-section/page2など、すべてのサブパスがリダイレクト対象となります。
外部サイトへのリダイレクト
リダイレクト先に外部URLを指定することで、サイト外へのリダイレクトが可能です。例えば、サービス終了したページへのアクセスを新サイトへ誘導する場合などに使用します。https://で始まる完全なURLを指定します。
フロントページへのリダイレクト
特定のパスからフロントページへリダイレクトする場合は、リダイレクト先に<front>と指定します。これにより、サイトのフロントページ設定に関わらず常に正しいフロントページへリダイレクトされます。
403エラーページからのリダイレクト
アクセス権限がないページ(403エラー)にアクセスした際も、リダイレクトルールが適用されます。これにより、権限不足のユーザーを適切なページ(ログインページや申請ページなど)へ誘導できます。
Tips
- リダイレクトルールは優先度順に処理されるため、同じパスに複数のルールがある場合は最初に一致したルールが適用されます
- Negateオプションを使用すると、「特定のロール以外」や「特定のユーザー以外」をリダイレクト対象にできます。メンテナンスページへの誘導などに便利です
- リダイレクトメッセージを「Yes」に設定すると、ユーザーにリダイレクトされたことを通知できます。UX向上のため適切に設定してください
- 設定エンティティを使用しているため、staging/production環境間での設定同期が容易です。drush cex/cimコマンドでエクスポート/インポートできます
- パスは先頭のスラッシュなしで保存されることがありますが、モジュールは両方のパターンをチェックします
- フロントページ(/)へのリダイレクトを設定する場合は、パスに<front>と入力してください
Technical Details
Admin Pages 4
/admin/config/system/url_redirect
設定済みのすべてのURLリダイレクトルールを一覧表示する管理画面です。各リダイレクトについて、ラベル、ソースパス、リダイレクト先パス、適用対象(ユーザー/ロール)、メッセージ表示設定、ステータスが表形式で表示されます。50件ごとのページネーション機能があり、各行から編集・削除操作が可能です。
/admin/config/system/url_redirect/add
新しいURLリダイレクトルールを作成するフォームです。リダイレクト元パス、リダイレクト先パス、適用対象(ユーザーまたはロール)、条件の否定、メッセージ表示設定、ステータスを指定できます。
/admin/config/system/url_redirect/{url_redirect}
既存のURLリダイレクトルールを編集するフォームです。ソースパス以外のすべての設定を変更できます。
/admin/config/system/url_redirect/{url_redirect}/delete
URLリダイレクトルールを削除する確認画面です。削除を確認するためのボタンと、キャンセルして一覧へ戻るリンクが表示されます。
権限 3
Troubleshooting 6
以下を確認してください:1) リダイレクトルールのStatusが「Enabled」になっているか、2) 現在のユーザーが指定したロール/ユーザーに該当するか、3) Negateオプションが意図通りに設定されているか、4) パスが正確に一致しているか(先頭のスラッシュの有無など)。また、キャッシュをクリアして再試行してください。
リダイレクト元とリダイレクト先が循環していないか確認してください。例えば、/page-aから/page-bへのリダイレクトと、/page-bから/page-aへのリダイレクトが同時に設定されているとループが発生します。また、403エラーページ用のカスタムページがリダイレクト対象になっていないか確認してください。
モジュールは設定変更時にrenderedキャッシュタグを自動で無効化しますが、反映されない場合はDrupalのキャッシュを完全にクリアしてください(drush cr または管理画面の「パフォーマンス」からキャッシュをクリア)。
同じソースパスに対して複数のリダイレクトルールを作成することはできません。既存のルールを編集するか、既存のルールを削除してから新しいルールを作成してください。
外部URLは必ず「http://」または「https://」で始まる完全なURLを指定してください。相対パスやプロトコルなしのURL(example.comなど)は内部パスとして処理されます。
ワイルドカードはパス内に「*」を含むパターンとして認識されます。パスパターンはDrupalのpath.matcherサービスによってマッチングされます。シンプルなワイルドカード(例:/section/*)を試し、複雑なパターンは段階的にテストしてください。
Security Notes 4
- リダイレクト設定へのアクセスは適切な権限を持つユーザーのみに制限してください。悪意のあるリダイレクトはフィッシング攻撃に利用される可能性があります
- 外部URLへのリダイレクトを許可する場合は、信頼できるドメインのみを指定するよう管理者に周知してください
- リダイレクトルールの変更履歴を追跡するため、設定のバージョン管理(Git等)を使用することを推奨します
- 大量のリダイレクトルールを設定すると、パフォーマンスに影響する可能性があります。必要最小限のルールに留めてください