我在我的网站上激活了SSL证书。我确实更改了设置:
setting > general
和编辑
wp-config.php
强制HTTPS:
define( \'FORCE_SSL_ADMIN\', true );
问题是,重定向不起作用,站点的HTTP和HTTPS两个版本都可以访问。
我检查了我的.htaccess
文件似乎一切都是正确的:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} on [OR]
RewriteCond %{SERVER_PORT} ^443$ [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} https
RewriteRule .* - [E=WPR_SSL:-https]
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteRule .* - [E=WPR_ENC:_gzip]
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{QUERY_STRING} =""
RewriteCond %{HTTP:Cookie} !(wordpress_logged_in_.+|wp-postpass_|wptouch_switch_toggle|comment_author_|comment_author_email_) [NC]
RewriteCond %{REQUEST_URI} !^(/(.+/)?feed/?|/(?:.+/)?embed/|/checkout/(.*)|/cart/|/my-account/(.*)|/wc-api/v(.*)|/(index\\.php/)?wp\\-json(/.*|$))$ [NC]
RewriteCond %{HTTP_USER_AGENT} !^(facebookexternalhit).* [NC]
RewriteCond "%{DOCUMENT_ROOT}/wp-content/cache/wp-rocket/%{HTTP_HOST}%{REQUEST_URI}/index%{ENV:WPR_SSL}.html%{ENV:WPR_ENC}" -f
RewriteRule .* "/wp-content/cache/wp-rocket/%{HTTP_HOST}%{REQUEST_URI}/index%{ENV:WPR_SSL}.html%{ENV:WPR_ENC}" [L]
</IfModule>
UPDATE
我有
WP-ROCKET 插件,我认为这是问题的主要根源,因为每当我清除缓存并从HTTP地址刷新站点时,它都会正确地重定向,但只重定向一次
最合适的回答,由SO网友:Kamran Asgari 整理而成
将此简单规则添加到.htacces
s文件您可以覆盖与插件的任何可能冲突并重定向问题
不要忘记将这些行添加到.htaccess
RewriteCond %{HTTP:CF-Visitor} \'"scheme":"http"\'
RewriteRule ^(.*)$ https://www.example.com/$1 [L]
SO网友:Nicolai Grossherr
当https处于活动状态时,您的重写条件(代码中的第4行到第6行)将适用,因此您正在从https重定向到https。因此,您应该更改条件以检查,如果https未激活,那么!on
和!^443$
和!https
. 此外,我不确定规则RewriteRule .* - [E=WPR_SSL:-https]
, 可能是WP Rocket特定的、超出范围的内容,这就是为什么我建议可能将其替换为RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
.
总之,我要说的是,将您的.htaccess
使用:
RewriteCond %{HTTPS} off
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]