.htaccessのみでSSL対応

特定ページのみをSSL対応にする場合

本来であればリンクを細かく調整すべきなんだろうけど

そうも言っていられない状況もある。

そこで.htaccessのmod_rewriteだけでできないのかな?と探してみたところ、

幾つか発見したのでメモ。

まずはSSLにしたいページのディレクトリに.htaccess作成

以下の例の場合、contact.php、contact_2.php、、contact_3.phpだけをSSL対象にできる。
RewriteEngine on

RewriteCond %{REQUEST_URI} .*/contact.php$ [OR] RewriteCond %{REQUEST_URI} .*/contact_2.php$ [OR] RewriteCond %{REQUEST_URI} .*/contact_3.php$ RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

RewriteCond %{REQUEST_URI} !(.*/contact.php$) RewriteCond %{REQUEST_URI} !(.*/contact_2.php$) RewriteCond %{REQUEST_URI} !(.*/contact_3.php$) RewriteCond %{HTTPS} on RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]



http://xxx.com/xxx/contact.phpでアクセスすると自動的に

httpsにリダイレクトされるんで、リンクのURLの修正などは不要になる。

ただこれだけだと、SSLページ内からリンクを踏まれて相対URLによって

本来、非SSLの別ページに飛んだ際に、httpsのまま飛んでしまうので、

ルートディレクトリに.htacessを作成して、これを防ぐための設定を追加。
RewriteEngine on
RewriteCond %{SERVER_PORT} ^443$
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L]


これによって、SSLにしておきたいページ以外へhttpsでアクセスした場合に強制的にhttpにリダイレクトさせる事が可能になる。

で、さらにもう一つ設定が必要で、これらの調整で設定されたSSLページを開いてみると

画像ファイルなどがうまく表示されなくなったりする場合がある。

一般的に画像は/imageなどに格納する場合が多いので

画像アクセスの際にどうやらルーディレクトリに配置した.htaccessによって、httpsがhttpに書き換えられてしまうらしい。

そこで、画像が保存されているディレクトリにも.htaccessを作成
RewriteEngine off


画像ファイルへのアクセス時はmod_rewriteを無効にしてやる。

これでhttpsでアクセスされた場合はSSLで画像にアクセスされるし、

httpでアクセしさせた場合は通常アクセスで画像が取得される。

その他、jsファイルやcssファイルなどのディレクトリにも

mod_rewite無効化の設定が必要になるかな。

いじょ。

なんだかんだで.htaccessを配置しまくんなちゃいけないけど、

リンクのURLを全て修正するのと、どっちが楽かで、状況に応じて判断すべきかな。

Check

コメントをどうぞ

メールアドレスが公開されることはありません。


次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

管理人運営サイト
<技術情報サイト:PGBox>
PGBOX