2026年5月20日
2026年5月20日
WordPressのHTTPSへのリダイレクトを設定する方法
はじめに
SSL証明書を取得したのにhttpでアクセスするとhttpsに転送されない、一部のページだけhttpのままになっている、リダイレクトループ(ERR_TOO_MANY_REDIRECTS)が発生する。HTTPSへのリダイレクト設定は環境によって方法が異なり、Cloudflareなどのプロキシを挟む場合は特別な対処が必要です。
症状・原因
HTTPSリダイレクトの問題:
- リダイレクト未設定:SSL証明書はあるがリダイレクトルールがない
- リダイレクトループ:WordPressとサーバーの両方でリダイレクトが二重に起きている
- Cloudflare環境の問題:プロキシが
HTTPS変数を正しく渡していない - wp-config.phpとサーバー設定の競合:両方でリダイレクトを設定している
解決手順
ステップ1:.htaccessでHTTPSリダイレクトを設定する(Apache)
# .htaccess — WordPress設定の上に追加
<IfModule mod_rewrite.c>
RewriteEngine On
# HTTPSへの301リダイレクト
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
# ↓ この後にWordPressのデフォルトルールが続く
# BEGIN WordPress
ステップ2:wp-config.phpでHTTPS強制する
// wp-config.php — HTTPS強制とSSL管理画面設定
define('FORCE_SSL_ADMIN', true);
// WP_HOME・WP_SITEURLをhttpsに統一
define('WP_HOME', 'https://yoursite.com');
define('WP_SITEURL', 'https://yoursite.com');
ステップ3:Cloudflare環境でのリダイレクトループ対策
CloudflareなどのプロキシではサーバーへのリクエストがHTTPになるため、WordPressがHTTPと判断してリダイレクトループが発生します。
// wp-config.php — Cloudflare環境でのSSL検出
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
$_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}
// この後に FORCE_SSL_ADMIN を設定
define('FORCE_SSL_ADMIN', true);
ステップ4:Nginxでの設定
# Nginx設定 — HTTPをHTTPSにリダイレクト
server {
listen 80;
server_name yoursite.com www.yoursite.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name yoursite.com www.yoursite.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
# WordPressの設定を続ける
}
ステップ5:WP_HOMEとWP_SITEURLをhttpsに変更する
# WP-CLIでURLを一括変換
wp option update siteurl 'https://yoursite.com'
wp option update home 'https://yoursite.com'
# DB内のhttp URLをhttpsに一括置換
wp search-replace 'http://yoursite.com' 'https://yoursite.com' --skip-columns=guid
ステップ6:Mixed Contentを解消する
// functions.php — 内部URLをhttpsに強制
add_filter('wp_get_attachment_url', function($url) {
return set_url_scheme($url, 'https');
});
add_filter('the_content', function($content) {
$home = get_option('home');
$content = str_replace(
'http://' . parse_url($home, PHP_URL_HOST),
'https://' . parse_url($home, PHP_URL_HOST),
$content
);
return $content;
});
ステップ7:リダイレクトのテスト
# curlでリダイレクトを確認
curl -I http://yoursite.com/
# Location: https://yoursite.com/ と表示されれば正常
# リダイレクトループの確認
curl -L --max-redirs 5 -I http://yoursite.com/
# Too many redirects なら設定を見直す
注意事項
- リダイレクトループが発生したらまず.htaccessのRewriteCondを見直し、
%{HTTPS} offの条件が正しいか確認してください。 - CDNやプロキシを使用している場合は
X-Forwarded-Protoヘッダーの処理を必ず追加してください。
まとめ
HTTPSリダイレクトは.htaccessへのRewriteCond %{HTTPS} offの追加とwp-config.phpのURL設定をhttpsに統一することで実現します。Cloudflare環境ではX-Forwarded-Protoの処理が必須です。wp search-replaceでDB内のURLも一括変換して完全移行しましょう。関連記事:Mixed Contentエラーの解決方法、www有り・なしのリダイレクト設定