mod_rewriteのメモ

mod_rewriteでいくつかやったので、それをメモしておく。
以下2行を忘れずに。

RewriteEngine on
RewriteBase /

ホスト名の統一

RewriteCond %{HTTP_HOST} ^(hoge.com)(:80)? [NC]
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ http://www.hoge.com/$1 [R=301]

RewriteCond %{HTTP_HOST} ^(hoge.com)(:443)? [NC]
RewriteCond %{SERVER_PORT} ^443$
RewriteRule ^(.*)$ http://www.hoge.com/$1 [R=301]

www無しをwww有りに統一するやり方。逆の場合には、中身を入れ替える。

特定ページへのHTTPSへのリダイレクト

httpでアクセスされたらhttpsへ転送するページ

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(hoge/.*|hoge.php)$ https://%{HTTP_HOST}/$1 [L,R=301]

httpsでアクセスされたらhttpへ転送するページ

RewriteCond %{SERVER_PORT} ^443$
RewriteRule ^(hoge/.*|hoge.php|.*.jpg|.*.gif|.*.png|.*.css|.*.js)$ – [C]
RewriteCond %{SERVER_PORT} ^443$
RewriteRule ^(.*)?$ http://%{HTTP_HOST}/$1 [L,R=301]

ディレクトリhogeとhoge.phpを自動的にhttpsへリダイレクト。その際に、画像やJS、CSS等の外部ファイルなどは、除外指定に含んでおく。
除外しないと、htmlやphpだけhttpsで、内部の画像類などがhttpで通信してしまうため、SSLがエラーになってしまう。また、その際にJS等の中身で、読み込みエラーなどが発生していると、その部分がhttpで読み出したりするので、エラーが発生するので、コーディングの際には注意すること。

課題

RewriteCond %{SERVER_PORT} ^443$
でなく
RewriteCond %{HTTPS} off
等で処理できると、きれいになるのだが、ちゃんと動作しなかったのは何でだろ?
ほかにも
RewriteCond %{REQUEST_URI} hoge.php$ [OR]
RewriteCond %{REQUEST_URI} hoge/
とかで、
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
とかけるとシンプルになるのだが・・・。いかんせん、やったサーバではうまく動作しなかった。orz

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL