ApacheでQueryString(URLパラメータ)の値によってBASIC認証をかけたい!
Apacheで特定のQueryString(URLパラメータ)に応じてBASIC認証をかける必要が出てきたのでRewriteを用いて対応しました。*1
設定したいこと
- 「area=admin」がQueryStringに設定されている場合BASIC認証をかける。
- 「area=admin」がない場合はそのまま表示できる。
当初は、 SetEnvIf を用いていけるかな?と考えていたけど、SetEnvIf の REQUEST_URIにはQueryStringは含まれていない。
「むー、こまった。」と途方に暮れていたらQueryStringを扱うにはRewriteを使いなさいと書いてあったので早速検討した。
「なんでBASIC認証かけるのにRewriteなんだよ。。。」ってブツブツ言いながら以下の設定をApacheに追加したら思ったとおりの挙動となりました。
Apacheの設定
RewriteEngine On RewriteCond %{QUERY_STRING} area=admin RewriteRule (.*) $1 [E=admin_access:1] <Location /> Order allow,deny Allow from All Deny from env=admin_access AuthUserFile /etc/httpd/conf/.htpasswd AuthGroupFile /dev/null AuthName "Administorator's Area" AuthType Basic require valid-user Satisfy Any </Location>
やっぱり、ちょっと違和感あるな。。。(^_^) ほかに方法ないのかな~
参考にさせていただいたサイト
まとめサイト: SetEnvIf の Request_URI には Query String は含まれない wall-climb » 特定URLのみBASIC認証を除外する
*1:2014年08月22日にQiitaに投稿した記事です。