PHP等のURLパラメータでIP制限やBASIC認証を設定する
Contents
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>
ディスカッション
コメント一覧
まだ、コメントがありません