Translate

2019年8月14日水曜日

SSL対応:httpへのアクセスをhttpsにリダイレクトする

 これまでに、非SSL領域(http)にあったファイルを、すべて完全SSL化してSSL領域(https)にアップロードすることが出来ました。

 いよいよ、httpへのアクセスをhttpsにリダイレクトしてユーザーが常にSSL領域のページを見るようにしたいと思います。

 今回は、全ページをリダイレクトするので作業は至って簡単です。非SSL領域(http)のルートにある.htaccessを以下の様に設定します。

RewriteEngine on
 RewriteCond %{HTTPS} off
 RewriteRule ^(.*)$ https:///books-nekoya.jp/$1 [R=301,L]

 修正した.htaccessを非SSL領域にアップロードしたら、念のため正しくリダイレクトされているかいくつかのファイルで検証します。ブラウザで非SSL領域のファイル(http)を開いてSSL領域(https)が表示されればリダイレクト自体は動作していることが確認できます。それが301リダイレクトであるかどうかを知るには、「301リダイレクト 確認」などのキーワードで検索すれば、そのためのツール(サイト)を容易に見つけることができます。

 ここまでで、SSL化に伴うサイトの設定は一応完了しました。

2019年8月9日金曜日

SSL対応のためのファイルの再アップロードとファイルの修正(4)

 前回は、.htaccessでサイトの非SSL領域へのリンクをSSL領域にリダイレクトする方法について考えてみました。

 その後、早速.htaccessを修正してSSL領域のページが(安全でないとの)警告なしで表示されるか調べてみました。ところが、警告はなかなか消えません。

 Javascriptなどは正しくリダイレクトされていますが、どうもCSSが読み込めていないようです。

 .htaccessによるCSSファイルのリダイレクトに関して、不具合が発生することは良くあることなのか? 参考になりそうな情報を検索してみましたが見つかりません。通常の場合であれば、つまづくような問題ではなさそうです。

 .htaccessの設定に問題があるのか? そこでブラウザでそれぞれのCSSのアドレスを入力してみると、正しくリダイレクトは行われています。どうやら.haccessの問題ではなさそうです。

 さらに調べを進めていくと、bootstrap(レスポンシブデザインのためのCSSライブラリ)で問題が発生していました。次のbootstrapを組み込んでいる行のアドレスをhttpからhttpsに変えたり、行そのものをコメントアウトすれば、他のCSSは読み込めるようになります。

<link href="http://books-nekoya.jp/css/bootstrap.min.css" rel="stylesheet">

 この時点で、bootstrapだけの問題かと思われましたが、他のHTMLではbootstrap読み込みの部分を修正しても、他のCSSが読み込まれません。ファイルによってはJavascriptも読めなくなっています。

 そもそも、スクリプトの読み込みを修正せずに.htaccessのリダイレクトだけで対応しようとすること自体が非常識なのだろうか? 

 この問題については、これ以上の追及を断念し、地道にURLをhttpからhttpsに書き換えていくことにします。。

 まだ非SSL領域からSSL領域への移行作業は進行中なので、HTMLにリンクされている多くのファイルがブロックされブラウザは「安全でないサイト」の警告を表示したりします。どのファイルがブロックされているのか調べるには、chromeでは、ブラウザウィンドウ右上のchromeの設定から「その他のツール」-「デベロッパーツール」を選び「Networkタブ」を開きます。「デベロッパーツール」は[Ctrl]+[Shift]+[i]でも開きます。

 「デベロッパーツール」の「Console」タブを開くと、「Mixed Content」(httpsからhttp上のリンクを参照)として警告が出ていますのでこれをhttps(SSL領域)を参照するように修正します。

 こうしてルート直下のhtmlは全て完全にSSL対応することが出来ました。

 今思えば、HTMLやJavascript内のhttp(非SSL領域)へのリンクを残したまま、.htaccessでのリダイレクトで対応できるという考えそのものが間違いだったようです。つまり、HTML内やJavascript内のURLは全てhttpからhttpsに書き換える必要がある様です。

 これに気づいたとき、その作業の大変さに少しぞっとしましたが、エディターの「Grepして置換」機能を使えば思ったほど大変な作業ではありませんでした。

2019年8月8日木曜日

SSL対応のためのファイルの再アップロードとファイルの修正(3)

 前回はSSL用に.htaccessを修正しました。と言っても、今は不要になったリダイレクトを削除しただけで、実質的には非SSL版と変わりません。

 今回はSSL対応のためのリダイレクトを.htaccessに加えていきます。

 ファイルをまるごとSSL用ディレクトリ(/ssl)に最アップロードして、非SSL領域の.htaccessで丸ごとSSL領域にリダイレクトすれば簡単なのかもしれませんが、今回はディレクトリ単位でSSL領域にアップデートして、様子を見ながら作業を進めていきたいと考えています。SSL領域のファイルの内部リンクは、非SSL領域のファイルを参照していますので、それを非SSL領域の.htaccessでSSL領域にリダイレクトさせてみます。

 ところで、リダイレクトには「301リダイレクト」と「302リダイレクト」あります。

 「301リダイレクト」は、恒久的なページの移動を意味するリダイレクトです。.htaccessでは次のようにRedirectの後にpermanentキーワードを付けてリダイレクトを指示します。

Redirect permanent /file1.html file_new.html

 これに対して、「302リダイレクト」は、トラブル発生時などの一時的なページの移動を意味するリダイレクトです。.htaccessでは次のようにRedirectの後に tempキーワードを付けてリダイレクトを指示します。

Redirect temp /file1.html file_new.html

 SEO上は「301リダイレクト」はリダイレクト前のページの評価がリダイレクト後のページに継承され、「302リダイレクト」では継承されないと言われたりもしますが、Googleは両者を区別しないという情報もあります。どちらが正しいのかよくわからないでので、今回は念のため「301リダイレクト」を使うことにします。

 以前のページの評価をリダイレクト先に継承し続けるために、一度設置した「301リダイレクト」は解除してはならないらしい。つい、うっかりして非SSL領域の.htaccessを消してしまったりリダイレクトを解除してしまわないか少し心配です。