如何使用 htaccess 强制 http-NOT https
Posted
技术标签:
【中文标题】如何使用 htaccess 强制 http-NOT https【英文标题】:How to force http- NOT https using htaccess 【发布时间】:2012-05-08 12:28:25 【问题描述】:我想要强制使用 https 的整个域都有一个目录,即“/docs”。在 /docs 文件夹中,我有以下 htaccess 文件:
RewriteEngine On
RewriteCond %HTTPS !=on
RewriteRule ^ https://%HTTP_HOST%REQUEST_URI [L,R=301]
这会强制 https 访问 /docs 目录中的所有内容,这正是我想要的。我遇到的问题是试图强制 REMOVE https 回到我网站的所有其他区域的 http。在站点的根文件夹(运行 wordpress)中,我有以下 htaccess 文件:
# 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
RewriteCond %HTTPS on
RewriteCond %REQUEST_URI !^/docs/?.*$
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]
很遗憾,这不起作用。我仍然可以通过 https 访问我网站的其他区域。
我需要进行哪些更改才能使其正常工作?
【问题讨论】:
【参考方案1】:由于接受的答案实际上并没有回答问题,我想我会发布我的解决方案。将此添加到您的 .htaccess
文件以强制使用 HTTP 而不是 HTTPS:
# BEGIN Force HTTP
RewriteEngine On
RewriteCond %SERVER_PORT 443
RewriteRule ^(.*)$ http://yourdomain.com/$1 [R=301,L]
# END Force HTTP
【讨论】:
感谢 rog 回答所提出的问题。 ;) 这不起作用,如果 HTTPS 版本没有有效的证书。 (因为浏览器的证书警报总是在 Apache 重写之前出现。) @TamásBolvári 有效点,但是问题提到他们已经使用了有效的证书。 @RezaS 虽然我同意您关于每个人都应该使用 HTTPS 的评估,但我认识到有时不常见的边缘情况需要非正统的解决方案。我不认为知道什么对每个人都是最好的,所以我会尽量回答被问到的问题。从这个答案收到的投票来看,似乎有些人觉得这很有用。这是我第一次因正确回答所提问题而遭到反对。 我尝试使用这个答案,但在我将这些行放在 .htaccess 文件中已经存在的其他一些行之后它不起作用,但仔细检查,这些行正在执行与 URL 相关的更多任务所以我改变了在开头定位它们的新行的位置,“瞧”!它奏效了。【参考方案2】:试试 Wordpress 的 Force 非 SSL 插件。
【讨论】:
如果要成为 SSL 的目录在 WordPress 目录之外,这会起作用吗?【参考方案3】:“WordPress Force HTTP”插件是唯一对我有用的东西。它不仅像大多数答案一样将首页的 https 更改为 http,而且还将您网站中所有子目录的 https 更改为 http。
https://en-au.wordpress.org/plugins/wp-force-http/
【讨论】:
【参考方案4】:为什么需要恢复到 http?如果您拥有正确的 SSL 证书,您不妨确保您的访问安全。除非您担心系统上的负载。
我知道这不是在回答问题,但我想强调的是,问题是关于如何做不好的做法,这是不应该做的首先。
【讨论】:
系统加载,部分图片和javascript会混合http/https等 使用相对 URI 来避免混合安全级别的问题(//example.com/foo/bar.jpeg
,如果您需要更改主机)。以上是关于如何使用 htaccess 强制 http-NOT https的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 .htaccess 在除一个目录 /images 之外的所有 URL 上强制使用 HTTPS?
apache_conf 如何使用.htaccess文件强制HTTPS
使用 .htaccess 和 mod_rewrite 强制 SSL/https