ちょっと前から Google Chrome などのブラウザで従来の HTTP 接続だとこのサイトへの接続は保護されていませんと警告表示が出るようになった。 この Blog では特にセンシティブな内容を扱ってはいるわけではないのだが、何となく気になってはいた。 しかし従来は SSL 証明書は有料が当たり前だったので自分の趣味でやっている Blog の SSL 化にお金をかけるのも躊躇うところだったが、昨今では Let's Encrypt という 90 日単位での証明書の更新作業が必要だが無料の SSL 証明書が出てきたので重い腰を上げた。

Qiita の記事で【apache】conohaのUbuntu18.04にLet's EncryptでSSL設定するまでというピッタリなものがあったので記事通り作業したら難なく対応できた。 Laravel で既に用意されている .htaccess に HTTPS へのリダイレクト処理を入れるのを試してみたが、なぜか個別記事に HTTP でアクセスされた際に URL が消失してしまい index.php へのアクセスになってしまう問題を発見して、これが解決できない。 と思ったらただ単に RewriteCond - Rule の記述の最後に入れてしまっていたので index.php へのリダイレクト後に HTTPS へのリダイレクトが走ってしまっていたからだった。 HTTPS へのリダイレクト処理を一番上に書くようにしたらうまくいった。

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # HTTP を HTTPS にリダイレクト
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>