【解決】シンフリーサーバーのリダイレクトがうまく動作しない

以前、シンフリーサーバーでドメイン設定が追加されている旨の記事を書いた。

一旦、この設定を有効にして動作検証していたところ、サブドメインを使用しているサイトで以下の問題が発生した。

① http://blog.fractcode.com にアクセスすると、https://www.blog.fractcode.com/blog.fractcode.com へリダイレクトされる

② https://www.blog.fractcode.com にアクセスすると、HTTPSにリダイレクトされない

①原因調査

まずはHTTP接続でwwwが付与されていない場合にリダイレクト先のURLが不正なものになる件の調査。リダイレクト処理なのでまずは.htaccessファイルを確認する。

public_html ディレクトリ直下にある.htaccessに以下の記述があった。これはシンフリーサーバーの設定を有効にすることで自動的に書き込まれる模様。

RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

どうも、最後の行にある$1が問題になっている様子。

①修正

public_html ディレクトリ直下にある.htaccessに記述されているルールの最後の行、/$1を%{REQUEST_URI}に書き換える。

書き換え後の.htaccessファイルは以下のようになる。元のコードはコメントアウトとしておいた。

RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} !^www\. [NC]
# RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

②原因調査

シンフリーサーバーのサブドメインのルートディレクトリ(自分の環境では、「public_html/www.blog.fractcode.com」)内にある.htaccessを確認。こちらには何も記述されていなかったため、SSL無しのアクセスがそのまま通るようになっていた。

②修正

サブドメインのルートディレクトリにある.htaccessに以下の内容を追記。www無しのリダイレクトに関してはルートディレクトリのものが適用されるため不要。

RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

影響

「①修正」のセクションでwww無しのアクセスの場合にwww付きのURLへリダイレクトする、という設定を手動で書き換えたため、シンフリーサーバーの設定画面では「転送しない」設定になっているように表示される。(動作としてはきちんとリダイレクトされるので問題無し)

コメント