サブドメインにWordPressをインストールしています:https://blog.example.com
SSLを実施するには、.htaccess
に次のリダイレクトがあります。
<IfModule mod_rewrite.c>
RewriteEngine On
# BEGIN FORCE HTTPS
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_Host}/$1 [R=301]
# END FORCE HTTPS
# BEGIN WordPress
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
</IfModule>
これは少し前まで機能していました。さて、http://blog.example.com
を呼び出すと、次のようになります:
永続的に移動
文書はここに移動しました。
また、ErrorDocumentを使用して要求を処理しようとしたときに、500内部サーバーエラーエラーが発生しました。
2行目の「here」という単語は、http://blog.example.com
にリンクしています。
.htaccess
の何が問題になっていますか?
WordPressの設定を確認しましたが、これらは問題ではありません。サイトのURLはhttps://blog.example.com
に正しく設定されています。
.htaccessを次のように変更することで解決できました。
<IfModule mod_rewrite.c>
RewriteEngine On
# BEGIN FORCE HTTPS
RewriteCond %{HTTPS} !=on
RewriteCond %{ENV:HTTPS} !=on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]*
# END FORCE HTTPS
# BEGIN WordPress
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
</IfModule>
あなたはすでにあなたのソリューションを見つけているように見えるので、これは本当に追加の情報ですが、とにかく...
RewriteCond %{SERVER_PORT} !^443$ RewriteRule (.*) https://%{HTTP_Host}/$1 [R=301]
L
にlast
(RewriteRule
)フラグがないため、これが意図したとおりに機能するとは思わない。これが以前に「機能している」ように見えた場合、WordPress自体が実際に適切なリダイレクトを発行していたと思いますか?
ここではL
フラグが省略されているため、書き換えエンジンはフロントコントローラーに進み、URLをindex.php
に内部的に書き換えました。 WordPressがステップインしない限り、これはクライアントに301ステータスコードを返しますが、Location
HTTP応答ヘッダー(外部リダイレクトに必要)はありません。これは、SEOに損害を与える可能性があります。
ただし、これだけでは、リダイレクトループは説明されません。これは、サーバー上のSSL実装の変更が原因である可能性がありますが、これは答えです。
WordPressを使用しているため、常にwp_optionsテーブルの最初の2つのエントリをhttpsドメインに変更できます。
これを実現する別の方法は、wp-config.phpファイルにSite HomeとWP Homeを追加することです。 関連するコーデックスへのリンク です。