HTTPSのアクセスをHTTPにリダイレクトする。

WordPressの管理アクセスをHTTPS化するということを以前ご紹介しました。
しかし・・・Bingから検索してアクセスするとHTTPSで表示されていました

HTTPSのページは自己署名の証明書(オレオレ証明書)を使っているため証明書エラーがでてしまいますし
そもそもブログの投稿記事にHTTPSである理由もない+HTTPSだと無駄な負荷がかかるということで管理画面以外のページはHTTPSをHTTPにリダイレクトする設定を行います。

内容を気にしない方は

スポンサーリンク

どのようにリダイレクトするのか。

apacheでは「rewrite_module」というモジュールがありこれを利用することでリダイレクトをすることができます。

apacheのコンフィグファイル内にモジュールの設定があることを「grep」コマンドで確認します。

# grep write /etc/httpd/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so

ここではLoadModuleで「modules/mod_rewrite.so」が設定されていれば問題ありません。

リダイレクトの設定を考える

次にリダイレクトの設定を考えていきます。HTTPSでアクセしたいページをHTTPSのまま通信させ、それ以外をHTTPにリダイレクトする設定を行います。
リダイレクトする内容は以下を設定します。

①WordPressの管理画面の以下の3ページについてはHTTPの場合⇒HTTPSにリダイレクトする。
・「/wp-login」
・「/wp-admin」
・「/wp-content/plugins」
②管理画面及びコンテンツファイルについてはリダイレクトせず、それ以外のHTTPS通信はHTTPにリダイレクトする。
リダイレクトしないページ
・「/wp-content」
・「/wp-include」
・「/wp-login」
・「/wp-admin」
・HTTPのリファラが「/wp-admin」ではないもの
※外観を見るときにHTTPSでトップページを表示させるため

リダイレクトの設定を追加

apacheではSSL関連の設定は「/etc/httpd/conf.d/ssl.conf」に設定されているためそちらに設定を追加します。

# emacs /etc/httpd/conf.d/ssl.conf

今回はVirtualHostの環境のため、リダイレクトを設定する対象のVirtualhostの中に以下の設定を追加していきます。

リダイレクトをONにする

        RewriteEngine ON

①の設定「WordPressの管理画面の以下の3ページについてはHTTPの場合⇒HTTPSにリダイレクトする。」

        RewriteCond %{SERVER_PORT} !^443$
        RewriteRule ^(/(wp-login|wp-admin|wp-content/plugins)/.*)?$ https://%{HTTP_HOST}$1 [L,R]

②の設定「管理画面及びコンテンツファイルについてはリダイレクトせず、それ以外のHTTPS通信はHTTPにリダイレクトする。」

       RewriteCond %{SERVER_PORT} ^443$
       RewriteCond %{REQUEST_URI} !^/wp-content/.*$
       RewriteCond %{REQUEST_URI} !^/wp-includes/.*$
       RewriteCond %{HTTP_REFERER} ^/wp-admin/.*$
       RewriteRule !^/(wp-login|wp-admin/.*) - [C]

       RewriteCond %{SERVER_PORT} ^443$
       RewriteRule ^(.*)?$ http://%{HTTP_HOST}$1 [L,R]

Rewrite