Nakkan Base

サーバー

「.htaccessでリダイレクトする」に苦労した話

作成させていただいたお客様のホームページを検索したら、Googleに上がっていたのは何と! http://から始まるあかんやつだった!

これは絶対にリダイレクト処理をせねばなるまい。

しかし…だ。

検索しても、静的サイトの場合のリダイレクト処理の仕方がもやもやしてイマイチはっきりしない。

.htaccessは、下手にいじると画面真っ白になってしまうという恐ろしさもある。

「静的サイトに.htaccessファイルなんて、なしなのかなぁ?」ともはやそっちの方は諦めつつ、他の対策を探しました。

そして何とか見つけたのが、「canonicalタグ」なるものでした。

★Webサイト利用者やGoogleを適切にHTTPSに誘導する方法

<link rel="canonical" href="(常時SSL化後のHTTPSのURL)">

とにかく、これを<head>に書き込んでみましたが、これはGoogleロボットが巡回してくれるのを待つしかないということで、即効性に欠けてて不安な面あり…。

で、この静的サイトはいったん置いておいて、先に、WordPressでご依頼いただいたサイトもhttp://でアクセスできてしまうので、こちらのリダイレクト処理をすることにしました。

こちらはWordPressということで必ず.htaccessファイルがあるはずだと考えたけれども、「これってサーバーによってやり方が違うのかなぁ…」とやっぱし不安に。

ちなみに私が使っているConoHaさんは自動的にリダイレクト処理もされているようで、「お客様は触らないでください」と書いてあった。(やっぱいいわ〜優秀☆)

とりあえず、このAレンタルサーバーさんでは、

1. まずFTPソフトの検索で.htaccessファイルを探す。

2. ダウンロードして開く。そこに以下を書き加える。

※「SSL化(http⇒https)」への転送

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

つまり、全体的にはこうなりました。

# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

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

</IfModule>

# END WordPress

3. アップロード

以上のやり方で成功しました! http://でアクセスしても、ちゃんとhttps://になります。

これに気を良くして、もしかしたら静的サイトでも無理やり.htaccessを作ったらいけるんじゃないかと思ったので、

1. まず「htaccess.txt」という可視ファイルを作り、

<ifModule mod_rewrite.c>
RewriteEngine on 
RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</ifModule>

2. これをBサーバーのメインフォルダにアップして、パーミッションを「604」に、ファイル名を「.htaccess」に変更する。

やったー! これで静的サイトでも無事にhttps://にリダイレクトされるようになりました。

以下のサイトさんにはお世話になりました。

★httpからhttpsにリダイレクトする方法と注意点について

★[Apache] mod_rewriteの使い方・.htaccessでリダイレクトする