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
この投稿へのトラックバック
トラックバックはありません。
- トラックバック URL
この投稿へのコメント