.htaccessでHTTP→HTTPSリダイレクト設定|基本コード・WordPress・サーバー別対応

.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.comexample.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 PermanentlyLocation: https://... が表示されていれば正常です。

リダイレクトチェーンを追跡
# -L でリダイレクト先まで追跡、-v で詳細表示
curl -ILv http://example.com 2>&1 | grep -E "< HTTP|< Location"

ブラウザの開発者ツールで確認

Chrome / Edge / Firefox の開発者ツール(F12)を使った確認手順です。

  1. ブラウザの開発者ツールを開く(F12 または Ctrl+Shift+I)
  2. 「Network(ネットワーク)」タブを選択
  3. 「Preserve log(ログを保持)」にチェック
  4. アドレスバーに http://example.com を入力してアクセス
  5. 最初のリクエストのステータスコードが 301 であることを確認
  6. 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を併用するとセキュリティがさらに向上する
  • 編集前のバックアップは必ず取る