【问题标题】:How do I force HTTPS (Cloudflare Flexible SSL)?如何强制使用 HTTPS(Cloudflare 灵活 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]

我在stackoverflow上看到过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 时我应该注意什么?

【问题讨论】:

    标签: php apache .htaccess ssl 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.comhttp://www.example.com 的所有流量重定向到https://www.example.com。但它不会将https://example.com 重定向到https://www.example.com
      【解决方案3】:

      最好的方法是使用 Cloudflare。

      在 Cloudflare 网站上:

      1. 转到“页面规则”顶部按钮
      2. 添加新规则:始终使用 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

        【讨论】:

          猜你喜欢
          • 2015-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-24
          • 2014-10-09
          • 2014-12-02
          • 1970-01-01
          • 2015-05-27
          相关资源
          最近更新 更多