.htaccessのパラメータ付きURLのリダイレクト方法
技術情報
.htaccessのパラメータ付きURLのリダイレクト方法についてまとめていいます。
目次
この記事の目次です。
1. htaccessのパラメータ付きURLのリダイレクト方法
2. 別のURLにリダイレクトする際にパラメータを引き継ぐ方法
3. 別のURLにリダイレクトする際にパラメータを引き継がない方法
4. 別のURLにリダイレクトする際にパラメータを上書きする方法
5. 別のURLにリダイレクトする際にパラメータを引き継ぎつつ付加する方法
6. 特定のパラメータがあるときだけリダイレクトする方法
1. htaccessのパラメータ付きURLのリダイレクト方法
パラメータ付きURLのリダイレクト設定について見ていきます。
2. 別のURLにリダイレクトする際にパラメータを引き継ぐ方法
別のURLにリダイレクトする際にパラメータを引き継ぐ場合はURLの「?」以降を記述しなければそのまま引き継がれます。
例えば、「http://<ドメイン>/before/index.php?aaa=bbb」のアクセスをパラメータを変えずに「https://<ドメイン>/index.php?aaa=bbb」にパラメータを引き継いでリダイレクトする場合です。
RewriteEngine on RewriteRule ^before/index.html$ https://<ドメイン>/index.php [R=301,L]
3. 別のURLにリダイレクトする際にパラメータを引き継がない方法
別のURLにリダイレクトする際にパラメータを引き継がない場合はURLに「?」をつけます。
例えば、「http://<ドメイン>/before/index.php?aaa=bbb」のアクセスをパラメータを付与しない「https://<ドメイン>/index.php」にリダイレクトする場合です。
RewriteEngine on RewriteRule ^before/index.html$ https://<ドメイン>/index.php? [R=301,L]
4. 別のURLにリダイレクトする際にパラメータを上書きする方法
別のURLにリダイレクトする際にパラメータを上書きする場合はURLの「?」以降を記述します。
例えば、「http://<ドメイン>/before/index.php?aaa=bbb」のアクセスをパラメータを変えずに「https://<ドメイン>/index.php?page=ddd」にパラメータを引き継いでリダイレクトする場合です。
RewriteEngine on RewriteRule ^before/index.html$ https://<ドメイン>/index.php?page=ddd [R=301,L]
5. 別のURLにリダイレクトする際にパラメータを引き継ぎつつ付加する方法
別のURLにリダイレクトする際にパラメータを引き継ぎつつ付加する場合はURLの「?」以降を記述し、「QSA」を指定します。
例えば、「http://<ドメイン>/before/index.php?aaa=bbb」のアクセスをパラメータを変えずに「https://<ドメイン>/index.php?page=ddd&aaa=bbb」にパラメータを引き継いでリダイレクトする場合です。
RewriteEngine on RewriteRule ^before/index.html$ https://<ドメイン>/index.php?page=ddd [R=301,QSA,L]
6. 特定のパラメータがあるときだけリダイレクトする方法
特定のパラメータがあるときだけリダイレクトする場合は「%{QUERY_STRING}」を判定します。
パラメータを引き継ぐ場合
特定のパラメータがあるときにパラメータを引き継いでリダイレクトする場合の例です。
RewriteEngine on RewriteCond %{QUERY_STRING} ^aaa=123$ RewriteRule ^test https://htaccess-support.com/test2 [L,R=301]
パラメータを引き継がない場合
特定のパラメータがあるときにパラメータを引き継がないでリダイレクトする場合の例です。
RewriteEngine on RewriteCond %{QUERY_STRING} ^aaa=123$ RewriteRule ^test https://htaccess-support.com/test2? [L,R=301]
参考1)「%{QUERY_STRING}」を用いたリダイレクトの例(文字列の値が指定される第1パラメータにヒットさせる例)
以下は、「%{QUERY_STRING}」を用いたリダイレクトの例です。 文字列の値が指定される第1パラメータにヒットさせる正規表現を使用しています。
パラメータを引き継ぐ場合
特定のパラメータがあるときにパラメータを引き継いでリダイレクトする場合の例です。
RewriteEngine on RewriteCond %{QUERY_STRING} ^aaa=(\w+&.*)$ RewriteRule ^test https://htaccess-support.com/test2 [L,R=301]
パラメータを引き継がない場合
特定のパラメータがあるときにパラメータを引き継がないでリダイレクトする場合の例です。
RewriteEngine on RewriteCond %{QUERY_STRING} ^aaa=(\w+&.*)$ RewriteRule ^test https://htaccess-support.com/test2? [L,R=301]
参考2)「%{QUERY_STRING}」を用いたリダイレクトの例(特定のパラメータを除いてパラメータなしにリダイレクトする例)
以下は、「%{QUERY_STRING}」を用いたリダイレクトの例です。 特定のパラメータを除いてパラメータなしにリダイレクトする例です。
RewriteCond %{QUERY_STRING} ^.+$ RewriteCond %{QUERY_STRING} !^aaa=.+$ RewriteRule ^.* https://htaccess-support.com/? [L,R=301]
動作としては、まず「RewriteRule」の行が実行されて、そのあとに「RewriteCond」のところが上から順に実行されます。 前に実行されたものを対象に次が実行されます。
関連記事
関連記事です。
リダイレクト
用語の意味や.htaccessの設定(正規表現やパラメータ)などリダイレクトについて解説しています。
更新履歴
更新履歴になります。
- 2022/10/8 「%{QUERY_STRING}」を用いたリダイレクトの例について追記しました。
- 2022/8/11 特定のパラメータがあるときだけリダイレクトする方法について追記しました。
- 2021/10/10 記事をアップしました。