Apacheで特定のQueryString(URLパラメータ)でIP制限などの制御をする
ApacehでIP制限をしているページがあり、そのページにアクセスがある場合、特定のパラメータを付きだとIP制限をせずにアクセスしたいって要望がありました。できれば「.htaccess」で制御したいって事でした。
<Directory>、<Location>、<File>のディレクティブを使えば簡単と思ったけどハマりました。下記の記事の<Directory>、<Location>、<File>のディレクティブの「.htaccess」は使えません
<Directory>, <Location> が.htaccessでは使えない
Rewriteを使って特定のQueryString(URLパラメータ)でIP制限などの制御をする
調べてみると、Rewriteを使って特定のパラメータがあると環境変数を付与して、その環境変数で「Deny from env=〜〜」とかで制御すればできることがわかりました。実際には下記のように設定にしました
http://example.com/test.php?secret=129319 とかのURLにアクセスすると、「secret=」がある場合はIP制限を無視しています。
$ sudo vi /etc/httpd/conf/httpd.conf
RewriteEngine on
RewriteCond %{QUERY_STRING} secret=
RewriteRule (.*) $1 [E=secret_access:1]
<Files ~ "test.php$">
Order Deny,Allow
Deny from all
Allow from <許可するIPアドレス>
Allow from env=secret_access
</Files>
Rewriteを使って特定のQueryString(URLパラメータ)でBASIC認証を設定する
この応用でBASIC認証でも使えます。
下記の場合は、http://example.com/test.php?secret=129319 とかのURLにアクセスして、「secret=」がある場合はBASIC認証をかけています。
「secret=」がない場合はBASIC認証をおこなわない設定です
$ sudo vi /etc/httpd/conf/httpd.conf
RewriteEngine on
RewriteCond %{QUERY_STRING} secret=
RewriteRule (.*) $1 [E=secret_access:1]
<Location />
Order allow,deny
Allow from All
Deny from env=secret_access
AuthUserFile /var/www/html/test/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user
Satisfy Any
</Location>



コメント