使用 htaccess 将 http 重定向到 https 不起作用

使用 htaccess 将 http 重定向到 https 不起作用
# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>
# END WordPress

上述 .htaccess 代码未重定向到 HTTPS。为什么?

(故意将 IfModule 注释掉,以表明我没有错过重写模块)

更新

当尝试http://htaccess.madewithlove.be我收到了

RewriteCond %{HTTPS} =on    This condition was not met
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301]    This rule was not met because one of the conditions was not met
RewriteCond %{REQUEST_FILENAME} !-f This variable is not supported: %{REQUEST_FILENAME}
RewriteCond %{REQUEST_FILENAME} !-d This variable is not supported: %{REQUEST_FILENAME}

我的 htaccess 功能很弱,所以我无法理解如何

RewriteEngine On

变成

RewriteCond %{HTTPS} =o

得到评论

This condition was not met

或者那个

RewriteCond %{REQUEST_FILENAME} !-d 

得到评论

This variable is not supported: %{REQUEST_FILENAME}

也许我累了。也许我只是太蠢了。

短暂性脑缺血发作

答案1

也许我累了。也许我只是太蠢了。

显然很累。

我不记得您编辑之前的具体配置,但根据您运行的测试:

RewriteCond %{HTTPS} =on    This condition was not met
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301]    This rule was not met because one of the conditions was not met
RewriteCond %{REQUEST_FILENAME} !-f This variable is not supported: %{REQUEST_FILENAME}
RewriteCond %{REQUEST_FILENAME} !-d

您似乎有以下规则和条件:

RewriteCond %{HTTPS} =on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301]

如果你休息一会儿后再看它,就会发现这不是你想要的。

RewriteCond %{HTTPS} =on

表示如果请求是 httpS,则执行规则。因此您需要:

RewriteCond %{HTTPS} =off

答案2

在...的帮助下Htaccess 测试器, 其他回答在 stackexchange、@ETL 和 @Michael Hampton 我最终得到:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

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

你们两个中的任何一个人都可以复制我的答案,我会将其标记为唯一(先到先得)并删除它。尊重那些应该这样做的人。

需要澄清的是,我更愚蠢,而不是疲惫。网站瘫痪后,我也很紧张。

这让我想到警告知道这一点是件好事。是否有某种奇怪的客户端缓存?这至少使测试变得随机。目前重定向适用于 Safari@OSX 和 Chromium@Win,但不是在 IE11@Win 上。对我来说。我想明天或者当我费心启动另一台机器时,它就会自行修复。
更新:我尝试了更多方法。在我客户的办公室,根级别的 http->https 有效,但在 IE 中却无效,而是挂起了。但在 Opera 中可以。第二天 IE 也可以。在家里,我的 IE 也出现了同样的问题,但速度快了一天。两者都挂起了某种等待状态。
我之所以写了这么多关于加载失败的胡言乱语,是为了提示下一位读者,快速编辑-保存-重新加载循环可能不起作用,并随时准备一个以上的浏览器。

相关内容