エックスサーバー(Xserver)でhttpやwwwから始まるアクセスを301リダイレクト
saratogax
記事内に商品プロモーションを含む場合があります
mixhost から Xserver へレンタルサーバを移行して 1 か月ほど。
初期設定では以下のアクセスが制御されずに、そのままサイトが閲覧できてしまいます。
・www ありのドメイン指定
・http プロトコルによるアクセス
例えば、以下のようなリクエストですね。
https://www.example.org
https://www.example.org/hoge
http://example.org
http://example.org/hoge
一般的なリダイレクト設定は他のサイトでも紹介されていますが、細かいところに手が届いていないものが多く、結果的に自分で設定してみました。
今回は .htaccess によるリダイレクトの記述を紹介します。
wwwありのURLをwwwなしにリダイレクト
こちらの設定は「%{HTTP_HOST}」の内容が www から始まっているかを確認すること。
http や https のプロトコルは気にしません。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ https://example.org%{REQUEST_URI} [R=301,L]
</IfModule>
httpのプロトコル要求をhttpsにリダイレクト
昨今では http はセキュリティ的にタブーということで推奨されていないので、自分では意図していなくても、そのまま http でサイトが閲覧できてしまうのは恥ずかしいですよね。
リダイレクト先の URL のドメインは「%{HTTP_HOST}」で置き換えれなくもないですが、次に紹介する条件指定の際など汎用的に使えなくなるのでベタに「example.org」とします。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-SSL} !on
RewriteCond %{HTTP_HOST} ^example\.org(.*)$
RewriteRule ^(.*)$ https://example.org%{REQUEST_URI} [R=301,L]
</IfModule>
2つの条件を同時に設定
個別にリライト設定を書くのもアレなので、OR で条件を繋げてしまいましょう。
これで、冒頭の条件を満たす制御ができそうです。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-SSL} !on
RewriteCond %{HTTP_HOST} ^example\.org(.*)$ [OR]
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ https://example.org%{REQUEST_URI} [R=301,L]
</IfModule>
ABOUT ME