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

About: dacelo


Leave a Reply

Your email address will not be published. Required fields are marked *