連載の4回目の今回は、URLのクエリ変数や値を書き換える Apache Rewrite 設定のサンプルを示したいと思います。
設定前の注意事項
「Directory コンテキストや .htaccess で転送設定する場合」と「VirtualHost コンテキストで転送設定する場合」とで、検索条件の先頭に「^/」が必要な場合とそうでない場合とがあります。 どちらのディレクティブに設定しようとしているのかを意識してください。 詳しくは以前の記事「ApacheのRewriteを設定する前に知っておくべきこと」を参考にしてください。
本稿では、VirtualHost ディレクティブで転送設定する場合の記述をしています。 Directory ディレクティブや .htaccess に設定する場合は、「^/」の記述を変更して設定してください。
また今回も RewriteCond ディレクティブを利用します。 RewriteCond について自信がない方は、「Apache RewriteCond の基礎知識」も参考にしてみてください。
サンプル
それではさっそくサンプルを示します。
(1) 変数名 hoge を moge に書き換える (変数 hoge の出現位置が固定の場合)
RewriteCond %{QUERY_STRING} ^hoge=(.*)$
RewriteRule ^/$ /?moge=%1 [R=302,L]
(2) 変数名 hoge を moge に書き換える (変数 hoge の出現位置が流動的な場合)
RewriteCond %{QUERY_STRING} ^((?:&?\w+=\w+)*)(?:&?hoge=)(\w*)((?:&\w+=\w+)*)$
RewriteRule ^/$ /?%1&moge=%2%3 [R=302,L]
(1) は、/ にアクセスした際のクエリ変数名「hoge」を「moge」に書き換える設定です。 変数「hoge」が必ずクエリ文字列の最初に出現することが保証されている場合は、このように簡易的に記述できます。
(2) は、変数「hoge」がクエリ文字列のどこに出現するかわからない場合の設定です。
サンプルの記述「(?:regex)」は、部分正規表現のグルーピングを表します。
置き換えたい変数「hoge」よりも前に「var=value」の表記が来るかもしれませんし、後に「var=value」の表記がくるかもしれないことを考慮した正規表現になっています。
おわりに
本稿では、URLのクエリパラメータを書き換える設定について解説しました。 本連載は、これでおしまいです。 また別の解説が思いついたら追記したいと思います。