如何强制使用 HTTPS(Cloudflare 灵活 SSL)?
Posted
技术标签:
【中文标题】如何强制使用 HTTPS(Cloudflare 灵活 SSL)?【英文标题】:How do I force HTTPS (Cloudflare Flexible SSL)? 【发布时间】:2016-04-24 07:02:24 【问题描述】:我在自己编程的网站上使用 Cloudflare Flexible SSL(没有框架或 CMS)。一切正常,现在我想在整个站点上使用 HTTPS。我在 Apache Web 服务器上使用 php。
我想知道我应该如何处理这个问题并将所有用户重定向到 HTTPS。
目前我的 .htaccess 设置如下:
# Force www.
RewriteCond %HTTP_HOST ^example\.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
我在***上看到过this answer,但它指向的another answer并不简单,而doesn't recommend rewrites。
这是 Apache 的建议:
<VirtualHost *:80>
ServerName www.example.com
Redirect "/" "https://www.example.com/"
</VirtualHost >
<VirtualHost *:443>
ServerName www.example.com
# ... SSL configuration goes here
</VirtualHost >
但坦率地说,我不知道这意味着什么。
如何将用户重定向到 HTTPS 和 www?切换到 HTTPS 时我应该注意什么?
【问题讨论】:
【参考方案1】:这样的事情可能会奏效:
RewriteEngine On
RewriteCond %HTTPS off
RewriteRule (.*) https://%HTTP_HOST%REQUEST_URI
【讨论】:
【参考方案2】:您可以尝试将其放入您的 .htaccess
文件中。
RewriteEngine On
RewriteCond %HTTP:CF-Visitor '"scheme":"http"'
RewriteRule ^(.*)$ https://www.example.com$1 [L]
这将检查访问者是否通过http
访问。如果是这样,它将重定向到同一页面的https
版本。
【讨论】:
这也会强制 www 吗? 是的。它会将http://example.com
和http://www.example.com
的所有流量重定向到https://www.example.com
。但它不会将https://example.com
重定向到https://www.example.com
【参考方案3】:
最好的方法是使用 Cloudflare。
在 Cloudflare 网站上:
-
转到“页面规则”顶部按钮
添加新规则:始终使用 https [ON]
或者你可以在你的.htaccess
中使用:
RewriteEngine On
# Redirect with www
RewriteCond %HTTP_HOST !^www\.example\.com [NC,OR]
# Redirect to https
# With Cloudflare:
RewriteCond %HTTP:CF-Visitor '"scheme":"http"'
# Without Cloudflare:
# RewriteCond %HTTPS off
RewriteRule ^ https://www.example.com%REQUEST_URI [NE,R=301,L]
【讨论】:
我现在会使用这个解决方案,但是如果将来可能使用自己的 SSL 证书的网站不使用 Cloudflare,知道如何做到这一点会很有趣。【参考方案4】:看起来之前的所有答案都已过时。
这对我有用:
RewriteCond %HTTPS off
RewriteCond %HTTP:X-Forwarded-Proto !https
RewriteCond %HTTP:CF-Visitor !https
RewriteRule ^(.*)$ https://%HTTP_HOST%REQUEST_URI [L,R=301]
我通过访问支持文章 How do I fix the infinite redirect loop error after enabling Flexible SSL with WordPress? 提出了这一点。然后我去了链接的CloudFlare Flexible SSL。我查看了源代码,发现了这个:
public function run()
$aIcwpHttpsServerOpts = array( 'HTTP_CF_VISITOR', 'HTTP_X_FORWARDED_PROTO' );
foreach( $aIcwpHttpsServerOpts as $sOption )
if ( isset( $_SERVER[ $sOption ] ) && ( strpos( $_SERVER[ $sOption ], 'https' ) !== false ) )
$_SERVER[ 'HTTPS' ] = 'on';
break;
if ( is_admin() )
add_action( 'admin_init', array( $this, 'maintainPluginLoadPosition') );
然后我将其翻译成.htaccess
规则。
【讨论】:
【参考方案5】:我认为有一种简单的方法可以做到 只需打开云耀斑仪表板 转到加密部分 在 SSL 部分选择完整 向下滚动,您将看到此部分
始终使用 HTTPS 将所有使用方案“HTTP”的请求重定向到“HTTPS”。这适用于对区域的所有 HTTP 请求。 将其打开 全部搞定
Source
【讨论】:
以上是关于如何强制使用 HTTPS(Cloudflare 灵活 SSL)?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Cloudflare Workers 中不丢失 301 https 重定向的引用值