WEB Tips デザイン・コーディング

www有り無し統一してhttps化する .htaccessのスマートな書き方

2020-05-20

本記事にはプロモーションが含まれています。

www有り無し統一してhttps化する .htaccessのスマートな書き方

ソラミ♪

Webエンジニアをやりつつ、デザインにも携わる株式会社コムワークの中の人。WordPress、Adobeアプリ、カワウソ好き。 2015年から当ブログ運営|2008年からGmail使用中|WordPress制作10年以上|15社以上のレンタルサーバー利用経験|100件以上のドメイン取得運用|サイト・ドメイン移転多数 »  もっとくわしく

以前にも
・www有無
・常時SSL化の際にhttpからhttpsへのリダイレクト
に関する記事を書いています。

しかしこの度、エックスサーバーにて新しいサブドメイン(www以外)を設定した時に.htaccessの記述内容が原因で、サブドメインの設定がうまくいかなかったので修正しました。

エックスサーバーでのサブドメイン設定

まず、エックスサーバーでサブドメインのディレクトリ構造について。

例えばtest.example.comというexample.comのサブドメインtestを設定するとディレクトリは以下のようになります。

/public_html/example.com/test/

example.comのディレクトリの直下にtestというディレクトリが生成されます。

このtestディレクトリにデータをアップすると、https://test.example.com/で表示されます。

しかし、このままの状態だと

https://example.com/test/

でもアクセスできてしまいます。そのためtest.example.comでのみアクセスされるように.htaccessを設置します。

.htaccessを設置するのは、testディレクトリです。

SetEnvIf Host "^test.example.com$" host
order deny,allow
deny from all
allow from env=host

test.example.comの部分は任意のドメインに書き換えます。

エックスサーバーではサブドメインの作成時にSSLの設定も同時にできますが、SSL設定が失敗した場合は手動でもう一度設定する必要があります。

また、サブドメインを検索エンジンにクロールされたくない場合は、アクセス制限も必要です。

以上でサブドメインの設定は完了です。

参考記事[エックスサーバー]サブドメインでWordPressのテスト環境を用意する方法

詳しい設定方法はエックスサーバーのマニュアルにあります。

サブドメインでアクセスできない

エックスサーバーでサブドメインを設定すると長くて1時間程度で設定が有効になります。

でもいくら時間がたっても、サブドメインにアクセスすると

https://example.com/test

に飛ばされてしまう。。。。

原因は.htaccessの設定

正常に表示されない原因は既に設置していた.htaccessの転送設定でした。

.htaccessには、wwwありに統一、httpはhttpsにリダイレクトする記述をしていました。

修正前の.htaccess

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

これを以下の記述に修正します。

修正後の.htaccess

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

これでサブドメインでアクセスすることができる様になりました。。。。

もっとスマートに.htaccessに記述する方法

上記の記述でも問題はないのですが、ドメインが変わればその度に書き直さないといけないということになります。

もっと汎用的にするには以下のように記述します。

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

www無しかつ、httpからhttpsへリダイレクトするのは以下にようにします。

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

これなら汎用的で、ドメインごとに書き換えなくてすみますね。

  • この記事を書いた人
  • 最新記事

ソラミ♪

Webエンジニアをやりつつ、デザインにも携わる株式会社コムワークの中の人。WordPress、Adobeアプリ、カワウソ好き。 2015年から当ブログ運営|2008年からGmail使用中|WordPress制作10年以上|15社以上のレンタルサーバー利用経験|100件以上のドメイン取得運用|サイト・ドメイン移転多数 »  もっとくわしく

-WEB Tips, デザイン・コーディング
-,