zuntan02のはてなブログ

備忘録的なものです

【Apache】IPとQueryStringの値によってアクセス制限/BASIC認証

【目的】
Aipoのタイムカード操作についてのみ、許可IP以外からはBASIC認証としたい

【参考】
ApacheでQueryString(URLパラメータ)の値によってBASIC認証をかけたい!
qiita.com

こちらが大変参考になった。ただ、上記にある
> RewriteRule (.*) $1 [E=admin_access:1]
だと、すべてをいったんリライトしてしまっていて、タイムカードのPOSTがGETになる件
hakobe932.hatenablog.com
があって、期待通りに動作しなかった。

【解決】
上記のキモはenvに値を載せて、その値があるときだけBasic認証、なので、リライトしない(-)
> RewriteRule .* - [E=admin_access:1]
でいいのかなと。

Aipoではタイムカードを投稿・修正するとき「template=ExtTimecard」というクエリストリングがPOSTされているので、これを条件にして以下の様にしてみました。

※なお、Aipoは
ameblo.jp
この辺参考に、tomcat直じゃなくてapache経由で接続している前提で、あくまでApacheのallow/denyで解決しています。

Basic認証する場合

RewriteEngine On
# 許可IP群でない、かつクエリストリングがマッチしたらtmcrdに1
RewriteCond %{REMOTE_ADDR} !^xxx.xxx.xxx.xxx
RewriteCond %{REMOTE_ADDR} !^xxx.xxx.xxx.xxx
RewriteCond %{QUERY_STRING} template=ExtTimecard
RewriteRule .* - [E=tmcrd:1]

<Location />
    Order allow,deny
    Allow from All
    Deny from env=tmcrd
    
    AuthType Basic
    AuthName "Restricted Area"
    AuthUserFile "/hoge/fuga/.htpasswd"
    Require valid-user
    
    Satisfy Any
</Location>

Basic認証がいらない場合

RewriteEngine On
# 許可IP群でない、かつクエリストリングがマッチしたらリライトせず403終了
RewriteCond %{REMOTE_ADDR} !^xxx.xxx.xxx.xxx
RewriteCond %{REMOTE_ADDR} !^xxx.xxx.xxx.xxx
RewriteCond %{QUERY_STRING} template=ExtTimecard
RewriteRule .* - [F]