Apache 強制SSLとBasic認証の導入

義兄の店の通販のサーバで、業務用の画面は当然パスワードで保護されている。
だけど、SSLされてなかった。

意識してhttps://をURLに入力すればもちろんSSLになるけど、普通に業務画面に入ると
httpのままだった。

そこで、htaccessによるベーシック認証と、mod_rewriteによる強制SSLを導入することに
した。
当該のディレクトリに以下のような.htaccessを設置。

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{SERVER_PORT} 80
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>
AuthUserfile /home/www/.htpasswd
AuthGroupfile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user

希望の動作としては、
1.httpでアクセス、
2.httpsに強制変更、
3.Basic認証
を期待していたんだが、、、、。
結果は
1.httpでアクセス
2.httpでBasic認証
3.htpsへ強制変換
4.httpsBasic認証
となった。同じ認証が2回必要になってしまった。

ということで、対策は以下
httpd.confのhttpの設定部分に
Alias /gyoumu /home/www/gyoumu
を入れる。
/home/www/gyoumu
に以下.htaccessを設置
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{SERVER_PORT} 80
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>

これでhttpで当該ディレクトリにアクセスしてきたら、ダミーのディレクト
/home/www/gyoumu
にアクセスする。
ここでmod_rewritehttpsに強制変更される。もちろんこの時点では認証はなし。
すると本来のディレクトリ<DocumentRoot>/gyoumuに移動される。
これで、httpsになって初めて認証が実施される。もちろん1回だけ。

これは使える。備忘録備忘録!!