.htaccessでのrewrite
httpd.confと同じように書いても動作しなかったので、メモ。
例として、フォームのページに遷移したらhttpsに変わる、
というようにしたいとする。
サーバーはUbuntu 9.10。
1 ヴァーチャルホストを作っておく。
/var/www/site1/
を作って、ここをドキュメントルートとしておく。
2 フォームページは1つディレクトリにまとめる。
/var/www/site1/form/
を作って、form関連のファイルはここにおく。
「form」ディレクトリ以下へのアクセスは、
httpsにする、という感じの設定にする。
3 httpd.confに書く場合
site1の設定ファイルで、
...
...
(ここからrewrite)
RewriteEngine on
RewriteLog "/var/log/apache2/site1_rewrite.log"
RewriteLogLevel 9 (← 確認が終わったら、0にしておく)
RewriteCond %{SERVER_PORT} !^443$(ポートが443でないなら)
RewriteRule ^/form/(.*?)$ https://%{HTTP_HOST}/form/$1 [L,R]
という感じで期待通りの動作になる。
(ログ吐かないならlogの記述はなくてもいいみたいですが。)
.htaccessにこれと同じように書いても、期待通りに動作してくれない。
4 .htaccessに書く場合
RewriteEngine on
RewriteBase /
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^form/(.*)$ https://%{HTTP_HOST}/form/$1 [L,R]
confとの違いは、
- RewriteBaseの指定
- RewriteRuleの置換元の「form」の前の「/」をはずす
こちらを参照:
http://goo.gl/JtozE