web-dev-qa-db-ja.com

HTTPからHTTPSへのリダイレクト:無限ループを作成しない方法

サブドメインに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に正しく設定されています。

1
bootsmaat

.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>
1
bootsmaat

あなたはすでにあなたのソリューションを見つけているように見えるので、これは本当に追加の情報ですが、とにかく...

RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_Host}/$1 [R=301]

LlastRewriteRule)フラグがないため、これが意図したとおりに機能するとは思わない。これが以前に「機能している」ように見えた場合、WordPress自体が実際に適切なリダイレクトを発行していたと思いますか?

ここではLフラグが省略されているため、書き換えエンジンはフロントコントローラーに進み、URLをindex.phpに内部的に書き換えました。 WordPressがステップインしない限り、これはクライアントに301ステータスコードを返しますが、Location HTTP応答ヘッダー(外部リダイレクトに必要)はありません。これは、SEOに損害を与える可能性があります。

ただし、これだけでは、リダイレクトループは説明されません。これは、サーバー上のSSL実装の変更が原因である可能性がありますが、これは答えです。

1
MrWhite

WordPressを使用しているため、常にwp_optionsテーブルの最初の2つのエントリをhttpsドメインに変更できます。

これを実現する別の方法は、wp-config.phpファイルにSite HomeとWP Homeを追加することです。 関連するコーデックスへのリンク です。

0
Prasad Ajinkya