.htaccessを編集して、HTTPでアクセスされたURLをHTTPSに自動リダイレクトさせる方法を解説します。
サイトをSSL化したら、HTTPアクセスをHTTPSに転送する設定 は必須です。設定を怠ると、HTTPとHTTPSの両方でページが表示され、SEO評価の分散 やセキュリティ警告 の原因になります。
この記事では、基本の3行コードから、www統一・ディレクトリ別設定・WordPress固有の注意点・サーバー別の設定方法・Nginx との比較・HSTSまで、実務で必要な知識を網羅的に解説します。
この記事で分かること
.htaccessの基本とApacheでの役割
HTTP→HTTPSリダイレクトの基本コード
www有無の統一やディレクトリ別など各種パターン
301リダイレクトと302リダイレクトの違い
WordPressでの.htaccess設定の注意点
エックスサーバー・さくら・ロリポップ等のサーバー別設定
Nginxでの同等設定との比較
リダイレクトループ・500エラー等のトラブルシューティング
curl・ブラウザdevtoolsでの確認方法
HSTSによるセキュリティ強化
.htaccessとは
.htaccess (読み方:ドットエイチティアクセス)は、Apache Webサーバーの分散設定ファイルです。
Apacheの設定ファイル(httpd.conf)を直接編集できない共有レンタルサーバーでも、ディレクトリ単位でサーバーの動作を制御できます。
項目
内容
ファイル名
.htaccess(ドットで始まる隠しファイル)
配置場所
制御したいディレクトリのルート
対応サーバー
Apache(Nginx・IISでは使えない)
主な用途
リダイレクト、BASIC認証、IPアクセス制限、キャッシュ制御
適用範囲
配置ディレクトリとそのサブディレクトリすべて
注意: .htaccessはApache専用の設定ファイルです。Nginx環境では使えません(Nginxでの設定方法は後述)。
SSL証明書の前提条件
HTTP→HTTPSリダイレクトを設定する前に 、SSL証明書がサーバーにインストールされている必要があります。
SSL証明書がない状態でHTTPSにリダイレクトすると、ブラウザでセキュリティエラーが表示されてサイトにアクセスできなくなります。
SSL証明書の確認方法
ブラウザで https://あなたのドメイン/ にアクセスし、アドレスバーに鍵アイコンが表示されていればSSL証明書は有効です。
コマンドラインでも確認できます。
SSL証明書の確認コマンド
curl -I https://example.com
実行結果
HTTP/2 200
server: nginx
content-type: text/html; charset=UTF-8
...
HTTP/2 200 が返れば、SSL証明書は正常に機能しています。
主要サーバーの無料SSL
レンタルサーバー
無料SSL
設定場所
エックスサーバー
Let’s Encrypt(自動更新)
サーバーパネル → SSL設定
さくらのレンタルサーバー
Let’s Encrypt(自動更新)
コントロールパネル → ドメイン/SSL
ロリポップ
Let’s Encrypt(自動更新)
サーバーの管理・設定 → 独自SSL
ConoHa WING
Let’s Encrypt(自動更新)
サイト管理 → サイトセキュリティ
HTTP→HTTPSリダイレクトの基本コード
.htaccessに以下の3行を追加するだけで、HTTPアクセスをHTTPSに自動リダイレクトできます。
.htaccess
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
各行の意味
ディレクティブ
説明
RewriteEngine On
mod_rewriteモジュールを有効化
RewriteCond %{HTTPS} off
HTTPSではない(= HTTPである)場合に条件成立
RewriteRule ^(.*)$
すべてのURLパスにマッチ
https://%{HTTP_HOST}%{REQUEST_URI}
同じホスト名・パスでHTTPSに転送
[R=301,L]
301(恒久的)リダイレクト、以降のルールは処理しない
ポイント: %{HTTP_HOST}はリクエストのホスト名(example.com)、%{REQUEST_URI}はパス(/page/)を自動的に引き継ぐため、どのページにアクセスしても正しいHTTPS URLにリダイレクトされます。
301と302リダイレクトの違い
リダイレクトのステータスコードは、目的に応じて正しく選ぶ必要があります。
比較項目
301(Moved Permanently)
302(Found)
意味
恒久的な移転
一時的な移転
SEO評価
新URLに引き継がれる
旧URLに留まる
ブラウザキャッシュ
リダイレクト先をキャッシュ
毎回サーバーに問い合わせ
使用場面
SSL化、URL変更、ドメイン移転
メンテナンス中、A/Bテスト
Google推奨
URLの恒久変更時はこちら
一時的な転送の場合のみ
.htaccessでの指定
[R=301,L]
[R=302,L] または [R,L]
注意: HTTP→HTTPSのリダイレクトは恒久的な変更なので、必ず301 を使いましょう。302を使うと、SEO評価がHTTPSのURLに移行されません。
各種リダイレクトパターン
基本の3行だけではカバーしきれないケースがあります。よく使うパターンを紹介します。
www有無を統一する(wwwなしに統一)
HTTPS化と同時に、www.example.com を example.com に統一するパターンです。
.htaccess(wwwなしに統一 + HTTPS化)
RewriteEngine On
# HTTPをHTTPSにリダイレクト
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# wwwありをwwwなしにリダイレクト
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
www有無を統一する(wwwありに統一)
.htaccess(wwwありに統一 + HTTPS化)
RewriteEngine On
# HTTPをHTTPSにリダイレクト
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# wwwなしをwwwありにリダイレクト
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
特定のディレクトリだけHTTPSにリダイレクト
サイト全体ではなく、管理画面やログインページなど特定のパスだけをHTTPSに転送したい場合です。
.htaccess(特定ディレクトリのみHTTPS化)
RewriteEngine On
# /admin/ と /login/ だけHTTPSにリダイレクト
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/(admin|login)/
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
特定のページだけHTTPSにリダイレクト
.htaccess(特定ページのみHTTPS化)
RewriteEngine On
# contact.htmlだけHTTPSにリダイレクト
RewriteCond %{HTTPS} off
RewriteRule ^contact\.html$ https://%{HTTP_HOST}/contact.html [R=301,L]
特定ページをHTTPSから除外する
基本的にはサイト全体をHTTPS化すべきですが、やむを得ず一部を除外する場合の書き方です。
.htaccess(特定パスを除外してHTTPS化)
RewriteEngine On
# /api/ 以下を除外
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/api/
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
WordPressでの.htaccess設定
WordPressはパーマリンク設定のために独自の.htaccessルールを自動生成します。HTTPSリダイレクトを追加する際は、記述する位置 に注意が必要です。
正しい記述位置
HTTPSリダイレクトのルールは、WordPressの # BEGIN WordPress ブロックの前 に記述します。
WordPress用 .htaccess
# ===== HTTPSリダイレクト(ここに記述)=====
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# BEGIN 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]
</IfModule>
# END WordPress
注意: # BEGIN WordPress ~ # END WordPress の間に記述すると、パーマリンク設定を保存した際にWordPressが自動的に上書きしてしまいます。必ずこのブロックの外に記述してください。
WordPress管理画面のURL設定
.htaccessの設定に加えて、WordPress管理画面の設定 → 一般 で以下のURLもHTTPSに変更します。
設定項目
変更前
変更後
WordPress アドレス (URL)
http://example.com
https://example.com
サイトアドレス (URL)
http://example.com
https://example.com
この変更をしないと、管理画面でのリンク生成がHTTPのままになり、混在コンテンツ(Mixed Content)の警告が発生する場合があります。
サーバー別の設定と注意点
レンタルサーバーによっては、標準のRewriteCond %{HTTPS} offが正しく動作しない場合があります。各サーバーに対応した記述方法を紹介します。
エックスサーバー
エックスサーバーはリバースプロキシを使用しているため、環境変数 %{HTTPS} の代わりに %{ENV:HTTPS} を使う場合があります。
エックスサーバー用 .htaccess
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
ポイント: エックスサーバーではサーバーパネルの「.htaccess編集」メニューからも直接編集できます。FTPでの操作に不安がある場合はこちらが安全です。
エックスサーバーの管理画面から.htaccessを編集する方法は、以下の記事でも紹介しています。
エックスサーバーの管理画面から.htaccessを編集する方法
エックスサーバーの管理画面から.htaccessを編集する方法を紹介します。
さくらのレンタルサーバー
さくらのレンタルサーバーでは、リバースプロキシの関係で %{HTTPS} ではなく %{HTTP:X-Sakura-Forwarded-For} を使う場合があります。
さくらのレンタルサーバー用 .htaccess
RewriteEngine On
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
注意: さくらサーバーの仕様は変更される場合があります。最新の情報はさくら公式のサポートページを確認してください。
ロリポップ
ロリポップも一般的な記述で動作します。
ロリポップ用 .htaccess
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
ロリポップではユーザー専用ページの「セキュリティ」メニューからも常時SSL化の設定ができます。
ConoHa WING
ConoHa WINGはサーバー側で常時SSLリダイレクトの設定が可能なため、.htaccessの編集は基本的に不要です。サイト管理画面から有効化できます。
手動で設定する場合は、一般的な記述で動作します。
サーバー別の設定まとめ
サーバー
RewriteCond
管理画面でのSSL設定
エックスサーバー
%{HTTPS} off
サーバーパネル → .htaccess編集
さくら
%{HTTP:X-Sakura-Forwarded-For} ^$
コントロールパネル
ロリポップ
%{HTTPS} off
ユーザー専用ページ → セキュリティ
ConoHa WING
%{HTTPS} off(通常不要)
サイト管理 → サイトセキュリティ
Nginxでの同等設定
Nginxでは.htaccessファイルは使えません。代わりに、Nginxの設定ファイル(通常 /etc/nginx/conf.d/ や /etc/nginx/sites-available/)に記述します。
nginx.conf(HTTP→HTTPSリダイレクト)
server {
listen 80 ;
server_name example.com www.example.com ;
return 301 https://$host$request_uri ;
}
server {
listen 443 ssl ;
server_name example.com ;
ssl_certificate /etc/ssl/certs/example.com.crt ;
ssl_certificate_key /etc/ssl/private/example.com.key ;
# ... 他の設定 ...
}
Apache vs Nginx 比較
比較項目
Apache(.htaccess)
Nginx
設定ファイル
.htaccess(各ディレクトリ)
nginx.conf(グローバル)
反映タイミング
即時(再起動不要)
nginx reload 必要
パフォーマンス
リクエスト毎にファイル読込
起動時に一度だけ読込(高速)
レンタルサーバー
ほとんどが対応
VPS・クラウド向け
記法
RewriteRule(正規表現)
return 301(シンプル)
ポイント: レンタルサーバー(エックスサーバー、さくら等)はほぼApacheなので .htaccess を使います。VPSやクラウド(AWS、GCPなど)ではNginxが主流です。
よくあるエラーと対処法
.htaccessの設定で発生しやすいトラブルと解決方法を紹介します。
リダイレクトループ(ERR_TOO_MANY_REDIRECTS)
ブラウザに「このページはリダイレクトが多すぎます」と表示されるエラーです。
原因
対処法
ロードバランサー/CDNの背後にいる
%{HTTP:X-Forwarded-Proto} で判定する
WordPress設定がHTTPのまま
管理画面 → 一般 でURLをhttpsに変更
プラグインとの競合
SSLプラグインの設定を確認
.htaccessの重複記述
リダイレクトルールが複数ないか確認
ロードバランサー経由の場合は、以下の記述を使います。
ロードバランサー環境用 .htaccess
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
500 Internal Server Error
.htaccessの記述ミスで発生する最も多いエラーです。
原因
対処法
構文エラー(スペルミス等)
RewriteEngine、RewriteCondの綴りを確認
mod_rewriteが無効
<IfModule mod_rewrite.c> で囲んで回避
文字コードの問題(BOM付き)
UTF-8(BOMなし)で保存し直す
パーミッション不正
.htaccessのパーミッションを644に設定
500エラーが出た場合は、まず .htaccess をリネーム(例: .htaccess.bak)してサイトが復旧するか確認し、問題の切り分けを行いましょう。
ポイント: mod_rewriteが有効かどうか不安な場合は、<IfModule mod_rewrite.c> で囲むと安全です。モジュールが無効なら中の記述は無視されるため、500エラーを回避できます。
IfModuleで囲んだ安全な書き方
<IfModule mod_rewrite.c >
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
Mixed Content(混在コンテンツ)警告
HTTPSページ内でHTTPのリソース(画像、CSS、JS)を読み込むと発生します。
原因
対処法
記事内のリンクがhttpのまま
Search Regex等で一括置換
テーマ/プラグイン内のURL
プロトコル相対URL(//example.com)に変更
外部リソースがHTTP
HTTPS版のURLに差し替え
WordPressの場合、以下のSQLで投稿内のHTTPリンクを一括でHTTPSに変換できます。
WordPress DB内のURL一括置換(SQL)
-- 必ずバックアップを取ってから実行してください
UPDATE wp_posts
SET post_content = REPLACE (post_content, 'http://example.com' , 'https://example.com' );
UPDATE wp_options
SET option_value = REPLACE (option_value, 'http://example.com' , 'https://example.com' )
WHERE option_name IN ('siteurl' , 'home' );
リダイレクトの確認方法
設定後は、正しくリダイレクトされているか必ずテストしましょう。
curlコマンドで確認
curl -I(ヘッダーのみ取得)で、レスポンスのステータスコードと Location ヘッダーを確認します。
curlでリダイレクトを確認
# HTTPでアクセスしてリダイレクトを確認
curl -I http://example.com
実行結果
HTTP/1.1 301 Moved Permanently
Date: Thu, 05 Mar 2026 10:00:00 GMT
Server: Apache
Location: https://example.com/
Content-Type: text/html; charset=iso-8859-1
301 Moved Permanently と Location: https://... が表示されていれば正常です。
リダイレクトチェーンを追跡
# -L でリダイレクト先まで追跡、-v で詳細表示
curl -ILv http://example.com 2>&1 | grep -E "< HTTP|< Location"
ブラウザの開発者ツールで確認
Chrome / Edge / Firefox の開発者ツール(F12)を使った確認手順です。
ブラウザの開発者ツールを開く(F12 または Ctrl+Shift+I)
「Network(ネットワーク)」タブを選択
「Preserve log(ログを保持)」にチェック
アドレスバーに http://example.com を入力してアクセス
最初のリクエストのステータスコードが 301 であることを確認
Locationヘッダーが https://example.com になっていることを確認
注意: ブラウザは301リダイレクトをキャッシュします。テスト時はシークレットモード (Ctrl+Shift+N)で確認するか、「Disable cache」にチェックを入れてください。
オンラインツールで確認
以下のオンラインツールでも、リダイレクトの状態を確認できます。
Redirect Checker (httpstatus.io)- リダイレクトチェーンの可視化
SSL Server Test (Qualys SSL Labs)- SSL証明書の詳細チェック
Google Search Console – インデックスされているURLの確認
HSTSでセキュリティを強化する
HSTS(HTTP Strict Transport Security) は、ブラウザに「このサイトは常にHTTPSでアクセスすること」を記憶させるセキュリティヘッダーです。
HSTSを設定すると、ユーザーが http:// でアクセスしても、ブラウザ側で自動的にHTTPSに変換 してからリクエストを送ります。サーバーへのHTTPリクエスト自体が発生しないため、より安全です。
HSTSの設定方法
.htaccess(HSTS設定を追加)
# HTTPSリダイレクト
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# HSTS(1年間 = 31536000秒)
<IfModule mod_headers.c >
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>
HSTSパラメータの説明
パラメータ
説明
max-age=31536000
HSTS設定の有効期間(秒)。31536000秒 = 1年間
includeSubDomains
サブドメインにもHSTSを適用
preload
ブラウザのHSTSプリロードリストに登録申請する場合に追加
注意: HSTSを設定すると、有効期間中はHTTPに戻すことが困難になります。SSL証明書を確実に維持できる環境であることを確認してから設定しましょう。初回テスト時は max-age=300(5分)など短い期間で試すことをおすすめします。
.htaccess編集時のベストプラクティス
.htaccessの編集は、サイト全体に影響する重要な操作です。以下のベストプラクティスを守りましょう。
編集前のチェックリスト
バックアップ : 編集前に現在の.htaccessをコピーして保存する
文字コード : UTF-8(BOMなし)、改行コードはLF(Unix形式)で保存
パーミッション : ファイルのパーミッションは 644 が推奨
テスト : 設定後すぐにサイトにアクセスして動作確認
キャッシュクリア : ブラウザキャッシュをクリアして確認(特に301テスト時)
.htaccessのバックアップコマンド
SSH接続先でのバックアップ
# 日付付きでバックアップ
cp .htaccess .htaccess.bak.$(date +%Y%m%d)
# 万が一の復旧
cp .htaccess.bak.20260305 .htaccess
まとめ
HTTP→HTTPSリダイレクトの設定は、SSL化したサイトにとって必須の作業です。
ポイント
内容
基本コード
RewriteEngine On / RewriteCond / RewriteRule の3行
ステータスコード
恒久的な移転なので必ず 301 を使用
WordPress
# BEGIN WordPress ブロックの前に記述
サーバー別対応
さくらサーバーはX-Sakura-Forwarded-For ヘッダーを使用
確認方法
curl -I でステータスコードとLocationヘッダーを確認
セキュリティ強化
HSTSヘッダーでブラウザレベルでHTTPSを強制
設定前にSSL証明書が有効であることを確認する
基本の3行(RewriteEngine / RewriteCond / RewriteRule)で即座にHTTPS化できる
WordPressでは # BEGIN WordPress の前 に記述する
サーバーによってRewriteCondの書き方が異なる場合がある
設定後は curl やブラウザのdevtoolsで動作確認する
HSTSを併用するとセキュリティがさらに向上する
編集前のバックアップは必ず取る