Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
56
Help us understand the problem. What is going on with this article?
@hkusu

[Apache]mod_rewireにおけるクエリ文字列の切り出し方法

More than 5 years have passed since last update.

mod_rewrite の RewriteRule ディレクティブの引数一つ目(遷移元URL)では、URLのクエリ文字列は評価されません。
例えば次のような書き方はできません。

.htaccess(NGな例)
RewriteEngine on

RewriteRule ^test.html?hoge=AAA /test2.html [L]

よって、クエリ文字列をURLの書き換え条件としたい場合は、いったん次のように切り出しておくと便利です。

.htaccess
RewriteEngine on

RewriteCond %{QUERY_STRING} (^|&)hoge=([^&]+)($|&)
RewriteRule .* - [E=X_QUERY_HOGE:%2]

上記の例では、クエリ文字列のキー hoge の値を、環境変数 X_QUERY_HOGE にセットしています。
クエリ文字列ですので、キーがそれ以外も指定されることを考慮する必要があります。

例:http://example.com/test.html?hoge=1&piyo=2&fuga=3 .. 引数1つ目にhoge
例:http://example.com/test.html?piyo=2&hoge=1&fuga=3 .. 引数2つ目にhoge
例:http://example.com/test.html?piyo=2&fuga=3&hoge=1 .. 引数3つ目にhoge

よって (^|&) でクエリ文字列の「先頭」もしくは「&の後」とし、同様に ($|&) でクエリ文字列の「最後」もしくは「&の前」とすることで、キーが複数指定された場合でも正確に切り出すことができます。

後は環境変数 X_QUERY_HOGE の値を判定してURLの書き換えをすればOKです。

.htaccess
RewriteEngine on

RewriteCond %{QUERY_STRING} (^|&)hoge=([^&]+)($|&)
RewriteRule .* - [E=X_QUERY_HOGE:%2]

RewriteCond %{ENV:X_QUERY_HOGE} ^AAA$
RewriteRule ^test.html$ /test2.html [L]

また下記は、URLの書き換えではありませんが、クエリ文字列 hoge=AAA がなければアクセス禁止(403エラー)とする例です。

.htaccess
RewriteEngine on

RewriteCond %{QUERY_STRING} (^|&)hoge=([^&]+)($|&)
RewriteRule .* - [E=X_QUERY_HOGE:%2]

RewriteCond %{ENV:X_QUERY_HOGE} !^AAA$
RewriteRule .* - [F]

これら以外にも、次のような用途でも利用できます。

  • リダイレクトする際に、引き継ぐクエリ文字列を絞る
  • Apacheのログに特定のクエリ文字列を記録する
    • CustomLog 設定で、切り出した環境変数を指定
56
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
hkusu
Software Engineer @ Yumemi, Inc JavaScript / Android / Kotlin / AWS etc..
yumemi
みんなが知ってるあのサービス、実はゆめみが作ってます。スマホアプリ/Webサービスの企画・UX/UI設計、開発運用。Swift, Kotlin, PHP, Vue.js, React.js, Node.js, AWS等エンジニア・クリエイターの会社です。Twitterで情報配信中https://twitter.com/yumemiinc

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
56
Help us understand the problem. What is going on with this article?