Redirect Match x クエリ文字列(/?q=)URL転送
Redirect Matchディレクティブによるクエリストリング(「/?q=xxx」 など)付きURLの転送が、
どのように転送されるか、されないのかについて本投稿では検証しています。
素直にmod_rewriteを利用して転送するしかないようです。
Redirect Match による クエリ文字列を含むURL転送検証
通常、Redirect Matchディレクティブによってクエリ文字列付きのURLの転送は、
基本的にサポート外の為、利用することはできません。
実際に.htaccessに対してクエリストリングを含むような、
URL転送指定を行った場合にどのような挙動が見られるのかを例示します。
一般的によく見かけるクエリ文字列を含むURL形式は以下のような感じかと思います。
他にもあるとは思いますが。
- /?q=nnn
- /?s=keyword
- /?tag=tagname
Redirect Match
Redirect Match (mod_alias)はクエリストリングの処理には対応していない旨が記載されています。
その為、基本的にはRedirect Matchを利用してのURL転送は推奨されていません。
mod_alias – Apache HTTP サーバ バージョン 2.2 (引用)
mod_alias は簡単な URL 操作向けに設計されています。 より複雑な操作、クエリーストリングの操作には、mod_rewrite で提供されるツールを使用してください。
では推奨していないということですが、
実際にどのような挙動をするのかを確認してみます。
ここでは「/?s=keyword」形式を例として、
検索キーワードを含むURLを対象に検証を行います。
要求URLの指定部分を短いものに変化させながら、
転送が行われるか否かを確認していきます。
/dir/?s=keyword による判定
.htaccess ファイルに以下のように記載を行います。
1 |
RedirectMatch 301 ^/dir1/?s=keyword$ http://redirect.trce.info/ |
アクセスによる動作確認
実際にアクセスするとリダイレクトは行われません。
http://q-redirectmatch.trce.info/dir1/?s=keyword
エスケープ記述による確認
念のため「?」のエスケープが有効かどうかの確認もしておきます。
※「\?」と入力し特殊文字「?」をエスケープしています。
.htaccess ファイルに以下のように記載を行います。
1 |
RedirectMatch 301 ^/dir1/?s=keyword$ http://redirect.trce.info/ |
実際にアクセスするとリダイレクトは行われません。
http://q-redirectmatch.trce.info/dir1esc/?s=keyword
こうした記述では動作しないことが分かります。
/dir/?s= による判定
.htaccess ファイルに以下のように記載を行います。
1 |
RedirectMatch 301 ^/dir2/?s=.*$ http://redirect.trce.info/ |
アクセスによる動作確認
実際にアクセスするとリダイレクトは行われません。
http://q-redirectmatch.trce.info/dir2/?s=keyword
エスケープ記述による確認
念のため「?」のエスケープが有効かどうかの確認もしておきます。
※「\?」と入力し特殊文字「?」をエスケープしています。
.htaccess ファイルに以下のように記載を行います。
1 |
RedirectMatch 301 ^/dir2/\?s=.*$ http://redirect.trce.info/ |
実際にアクセスするとリダイレクトは行われません。
http://q-redirectmatch.trce.info/dir2esc/?s=keyword
こうした記述では動作しないことが分かります。
/dir/?s による判定
.htaccess ファイルに以下のように記載を行います。
1 |
RedirectMatch 301 ^/dir3/?s.*$ http://redirect.trce.info/ |
アクセスによる動作確認
実際にアクセスするとリダイレクトは行われません。
http://q-redirectmatch.trce.info/dir3/?s=keyword
エスケープ記述による確認
念のため「?」のエスケープが有効かどうかの確認もしておきます。
※「\?」と入力し特殊文字「?」をエスケープしています。
.htaccess ファイルに以下のように記載を行います。
1 |
RedirectMatch 301 ^/dir3/\?s.*$ http://redirect.trce.info/ |
実際にアクセスするとリダイレクトは行われません。
http://q-redirectmatch.trce.info/dir3esc/?s=keyword
こうした記述では動作しないことが分かります。
/dir/? による判定
.htaccess ファイルに以下のように記載を行います。
1 |
RedirectMatch 301 ^/dir4/?.*$ http://redirect.trce.info/ |
アクセスによる動作確認
実際にアクセスするとリダイレクトは行われません。
http://q-redirectmatch.trce.info/dir4/?s=keyword
エスケープ記述による確認
念のため「?」のエスケープが有効かどうかの確認もしておきます。
※「\?」と入力し特殊文字「?」をエスケープしています。
.htaccess ファイルに以下のように記載を行います。
1 |
RedirectMatch 301 ^/dir4/\?.*$ http://redirect.trce.info/ |
実際にアクセスするとリダイレクトは行われません。
http://q-redirectmatch.trce.info/dir4esc/?s=keyword
こうした記述では動作しないことが分かります。
/dir/ による判定
.htaccess ファイルに以下のように記載を行います。
1 |
RedirectMatch 301 ^/dir5/$ http://redirect.trce.info/ |
アクセスによる動作確認
実際にアクセスすると通常のリダイレクトが行われます。
http://q-redirectmatch.trce.info/dir5/?s=keyword
以下のURLへ転送されます。
転送先のURLに対してもクエリストリングが引き継がれていることが確認できます。
http://redirect.trce.info/?s=keyword
こうした転送では転送先にWordPressなどが導入されていれば、
クエリストリングをWordPressが処理し、サイト内の検索結果を表示させることができます。
検証結果
結果として、どのように記述したとしても、
クエリストリング部分を判定条件に記述することはできないことが分かります。
記述した場合には一切マッチングが行われず転送は行われません。
ただ、通常通りディレクトリ指定によるマッチングを行った場合、
転送先のURLには、クエリストリング部分のURLは付与されて転送されます。
ヘルプに明記されているとおり、
クエリストリングを含むURL形式はmod_rewriteを利用して転送する必要がありそうです。
mod_rewriteであれば柔軟な転送を行うことができます。
Apache,Apache Hadoop,Apache Subversion,Hadoop,HDFS,HBase,Hive,Mahout,Pigは、
Apache Software Foundationの米国およびその他の国における登録商標または商標です。
ApacheソフトウェアはApache Software License (原文)および
Apache License, 2.0 (原文)に基づきOpen Source Initiativeに承認されライセンスされています。
公開日:
最終更新日:2014/12/17