「BASIC認証」タグアーカイブ

【cakePHP】.htaccessでmod_rewriteを使いつつ特定のURLをBASIC認証なしにする

毎日スパムコメントを捨てています、自宅プログラマです。

さくらのレンタルサーバーってCGI版PHPなんで、CakePHPの認証モジュールを使えないんですよねー。そういうわけで、apacheでBASIC認証かけていました。最初の.htaccessはこうです。

AuthUserFileは自分で作ってくださいね。bakerattaというのはfoobarやhogeと同じようなメタ構文変数ってやつです。

How to make Basic Auth exclude a rewritten URL
をみて

をやるとmedicine以下の時だけ$_SERVER[‘REDIRECT_noauth’]という変数ができてました。$_ENVにも同じものが。なんだ、これ、おもろー。なんでREDIRECT_がつくんだろ。$_SERVER[‘REDIRECT_REDIRECT_noauth’]ってのもできるし。そっか、URLが書き換わるたびにhtaccessを評価するんですね。
って、最初、環境変数がセットされているか確認の仕方が分からず、ここまででかなり苦労しました。呼び出したPHPでphpinfo()を実行すればapacheの一時変数も$_SERVERに入るんで、これで足がかりができました。
phpinfoの結果

んで、それでもうまくいかず、いろいろやっているうちに結局mod_rewriteの環境変数使わなくてもSetEnvIfだけでいけました。

Satisfy にanyを設定することにより、ユーザー認証だけでなくホスト制限もみてくれるようになります。
これで通常はBASIC認証かけつつ、medicineディレクトリ(と、そこから呼び出されているcss/imgディレクトリ)以下がBASIC認証対象外になりました。

ポイントは、Rewrite書き換え前と書き換え後、2つのURL両方を書いておくことです。

SetEnvIfを使ってBASIC認証解除したいURLを加えていけばいいので分かりいいですね。

## 2016/03/16 追記
img/x.gifのようなファイルをリクエストしているにも関わらずファイルがみつからない404の時にもBASIC認証がでていたので
SetEnvIf Request_URI “/webroot/index.php” noauth
を追記しました。
ファイルがない場合、cakePHPはwebroot/index.phpにリダイレクトするのでここも許可対象に入れたということです。一見すべてのアクセスが許可されたように思えますが、URLが書き換えられる前もチェックされるのでこれでいいのだ!
あと、特定のコントローラだけBASIC認証かける時とかはPHPで処理した方が簡単です。
HappyQuality – [CakePHP][PHP]コンポーネントを利用せずにベーシック認証を実装する

【シェルプログラミング】Basic認証をかけるシェルプログラム

開発途中のサイトで検索エンジンに補足されたり、一般のお客様に知らずにユーザー登録されたりしないよう、BASIC認証をかけることがそこそこあるんですが、毎回やり方を調べるのが面倒なのでシェルプログラムにしました。

そんなにシェルプログラムに慣れてるわけではないなか、すんごく簡単に作ったので変なところがあるかもしれませんが、今度BASIC認証かける時にも使えるよう、備忘録代わりに書いておきます。

認証をかけたいファイル名(index.htmlとかautorize_*とか)とユーザー名を入力して、パスワードを入力するとカレントディレクトリの.htaccessに設定を追加して.htpasswdファイルを作成します。
ファイル名を省略すると、カレントディレクトリ以下が対象になります。

既にhtpasswdがある場合は上書きになるので注意。.htaccessには追記です。重複登録は考慮していないので内容をみて分からない人は普通に登録したほうが無難。
.htaccessの隠蔽とかやろうと思ったけど試したサーバーでは既にみれなくなっていたのでやっていません。