理系学生日記

おまえはいつまで学生気分なのか

HTTP から HTTPS へのリダイレクトにはまる

研究室でもやった(正しくはコイさんとかにやってもらった)のだけれど,HTTP から HTTPS へ自動的にリダイレクトさせるというのは,Web サーバの設定ではよくあるものだったりします.Apache クックブックにもその解は載っていて,まぁこんなかんじだ.

|apache| RewriteCond "%{SERVER_PORT}" "^80$" RewriteRule "^(.*)$" "https://%{SERVER_NAME}$1" [R,L] ||< RewriteCond で 80 番ポート (http) を叩くリクエストをキャッチして,二行目でそのリクエストを https に置き換えるという簡単なお仕事.フラグの R はリダイレクト (302 MOVED TEMPORARILY), L は後続のルールがないことを示しています.場合によっては R=301 (301 MOVED PERMANENTLY) の方が良いかもしれません. ISBN:978-4-87311-381-4:detail

ところが,ぼくは一時違わず上記記述をコンフィグに記したにも関わらず,全然リダイレクトしない!!!! ていうか最初は https で繋がらなかったし!!!! ぼくはミスドから自宅にアクセスしながら悶々としていたのです.

**原因 1

原因の一つはそもそもサーバにリクエストが到達していなかったこと. 自宅のルータが port forwarding させる形で Web サーバへのアクセスができるようにしているのですが,443 番ポートのフォワーディング設定をしていなかったので,そもそも https に繋がらない.あほか.

**原因 2

RewriteEngine を ON にするのを忘れていたこと. そもそも動いてない.

**リダイレクト

その辺に気づくのに結構かかってうんうんするなどしてましたけど,ようやく正しくリダイレクトされるようになった.

|tcsh| $ telnet my-webserver.com 80 Trying ddd.ddd.ddd.ddd Connected to my-webserver.com Escape character is '^]'. GET /index.html HTTP/1.0

HTTP/1.1 302 Found Date: Sat, 20 Dec 2008 12:42:01 GMT Server: Apache/2.2.9 Location: https://my-webserver.com/index.html Vary: Accept-Encoding Content-Length: 361 Connection: close Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 302 Found

Found

The document has moved here.


Apache/2.2.9 at my-webserver.com Port 80

Connection closed by foreign host. ||<