web-dev-qa-db-ja.com

.htaccessがページをHTTPからHTTPSにリダイレクトしません

.htaccessがページをhttpからhttpsにリダイレクトしないようです。ドメインはhttpsにリダイレクトされますが、ページはリダイレクトされません…Webホストからの不適切な構成になりますか?

これまで私がやってきたことは次のとおりです。

  • SSL証明書を選択し、ホストから自分のWebサイトにインストールします。
  • Define( 'FORCE_SSL_ADMIN'、true);でwp-configがHTTPからHTTPに強制的に渡されるようにします。
  • Replace and Search DBを使用してすべてのURLをHTTPに変換します
  • このドメインをGoogle Search Consoleに追加…

このコードを私の.htaccessに入れてください:

<IfModule mod_rewrite.c>
RewriteEngine On
# Redirect to HTTPS 
RewriteCond %{HTTP_Host} ^http://example\.com [NC]
RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTPS} =off [OR]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
# Redirect from www HTTPS to HTTPS
RewriteCond %{HTTP_Host} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

これですべてだと思います...この問題の原因は何だと思いますか?

1
Sandra
RewriteCond %{HTTP_Host} ^http://example\.com [NC]

HTTP_Host変数にはスキーム + ホスト名ではなく、ホスト名のみが含まれているため、これは決して一致しません。これが一致しない場合、http://example.com/...をHTTPSにリダイレクトしません。 (ただし、これをsecondルールブロックで正しく使用しているため、willhttp://www.example.com/...をHTTPSにリダイレクトします。)

ドメインは1つしかないと思いますか?その場合、そのディレクティブは単純に削除する必要があります(修正しないでください)。

RewriteCond %{HTTPS} =off [OR]

ただし、最後のORディレクティブに誤ったRewriteCondフラグもあります。前の条件が一致した場合、これは本質的に<condition> OR trueであるため、リダイレクトループになります。これはalways trueです。

概要

# Redirect to HTTPS 
RewriteCond %{HTTP_Host} ^http://example\.com [NC]
RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTPS} =off [OR]
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

したがって、要約すると、最初のルールブロック(上記)を次のように置き換える必要があります。

# Redirect to HTTPS
RewriteCond %{HTTPS} =off
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]

SERVER_PORTおよびHTTPSの両方をチェックしても意味がありません。どちらかで十分です。両方ではありません。

2
MrWhite