.htaccessがページをhttpからhttpsにリダイレクトしないようです。ドメインはhttpsにリダイレクトされますが、ページはリダイレクトされません…Webホストからの不適切な構成になりますか?
これまで私がやってきたことは次のとおりです。
このコードを私の.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>
これですべてだと思います...この問題の原因は何だと思いますか?
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
の両方をチェックしても意味がありません。どちらかで十分です。両方ではありません。