Apacheで特定のパラメータ含むURLだけアクセス制限をする方法
やりたいこと
http://example.com/hoge.php?status=fugafuga
みたいなパラメータを含むURLを出力するシステムがあって、特定のパラメータのときだけIPでアクセス制限をしたい!
当初やろうとした方法
「Locationディレクティブに普通に書けばいいんじゃないの?」と思って
広告
<Location “/hoge.php?status=fugafuga”>
みたいに書いてみたけどまったく期待通りに動かなかった。
RequestURIにはQueriStringは含まれない!
SetEnvIf でセットできたりするかな?とかも試したんですけど、SetEnvIf のREQUEST_URIにはQueryStringは含まれないんですね。
Mod_rewriteを使うしかない
そんなこと、マニュアルに書いてないじゃんと思って、英語の方で確認したら、
the portion of the URL following the scheme and host portion without the query string.
に続けて、query string にマッチさせたかったら mod_rewrite を使えと書いてありますね。
やっぱりスイスアーミーナイフが必要なんだ。
ApacheでURLのクエリ文字列によりアクセス制限 | Livingdeadの日記 | スラド
https://srad.jp/~Livingdead/journal/523588/
RewriteEngine On RewriteCond %{QUERY_STRING} status=fugafuga RewriteRule .* - [E=PRIVATE:true] <location hoge.php=""> Order deny,allow deny from env=PRIVATE allow from 123.456.789.000 </location> |
というわけで、別にURLをリライトするわけじゃないのになぁ、とちょっと釈然としないながらも、上記のようなmod_rewriteを設定して、特定のパラメータのときのみ許可IPで制限することに成功。
※注 WordPressがなんか勝手に書き換えちゃうんですけど、上記のLocationの中身は
Location “hoge.php” と書いています。
参考URL
ApacheでURLのクエリ文字列によりアクセス制限 | Livingdeadの日記 | スラド
ApacheでQueryString(URLパラメータ)の値によってBASIC認証をかけたい! – Qiita
mod_rewriteでApache環境変数を一時変数として利用する – Qiita