1

我的 SSL 由 cloudFlare 管理,但我更喜欢使用 htaccess 方法来控制站点重定向以使用 HTTPS。我有一个域www.mysite.com和一个子域demo.mysite.com。我希望在 www.mysite.com 的完整网站和完整的网站上使用 HTTPS,demo.mysite.com但我的子域上只有 1 页以防止混合内容。该页面可以包含在 iFrame 中加载的 HTTP 和 HTTPS 链接。目前该页面与整个网站一起以 HTTPS 加载,但我希望它仅以 HTTP 而不是 HTTPS 加载。该页面demo.mysite.com/surf.php可以通过单击位于的广告来访问demo.mysite.com/ads.php

我在我的 htaccess 文件中尝试了这个,但页面surf.php仍然重定向到 HTTPS。

# FORCE HTTPS
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} \/(surf.php)
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

# DISABLE HTTPS
RewriteCond %{HTTPS} on
RewriteCond %{SCRIPT_FILENAME} !\/(surf.php) [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://%{HTTP_HOST}$1 [R=301,L]

我在我的 cloudFlare 设置中禁用了“始终使用 HTTPS”,并且我的 SSL 是灵活的。此外,没有设置页面规则。我更喜欢 htaccess 方法。请帮助我并告诉我该怎么做?

4

2 回答 2

1

我在具有灵活 Cloudflare 证书的 Cloudflare 域上进行以下工作。

我有 2 个 Cloudflare 页面规则,而不是使用 .htaccess。

第一条规则:

*.domain.com/page-to-ignore.htm

SSL: Off

第二条规则:

http://*.domain.com/*

Always Use HTTPS  

顺序很重要,在您自己的网站上进行测试时,请确保您已清除浏览器缓存。

希望这可以帮助!

在此处输入图像描述

于 2018-04-06T23:45:30.630 回答
0

如果您仍然面临问题,那么您也可以使用 PHP 代码。将此代码粘贴到网站的头文件中,或粘贴到您希望将网站重定向到 HTTPS 或 HTTP 的每个页面上。确保在 cloudFlare 中禁用“始终使用 HTTPS”,您可以选择任何您想要的 SSL,即灵活、完整或完整(严格)。

用于重定向到 HTTPS 的 PHP 代码:

if($_SERVER['HTTP_HOST'] != 'localhost'){
  if(!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on'){
    if(!headers_sent()){
      header("Status: 301 Moved Permanently");
      header(sprintf('Location: https://%s%s',$_SERVER['HTTP_HOST'],$_SERVER['REQUEST_URI']));
      exit();
    }
  }
}

用于重定向到 HTTP 的 PHP 代码:

if($_SERVER['HTTP_HOST'] != 'localhost'){
  if(isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == 'on'){
    if(!headers_sent()){
      header("Status: 301 Moved Permanently");
      header(sprintf('Location: http://%s%s',$_SERVER['HTTP_HOST'],$_SERVER['REQUEST_URI']));
      exit();
    }
  }
}

这对我很有效。将代码粘贴到每一页的顶部。如果您正在使用,session_start();则在此之后立即放置此代码。这是一个很好的做法。

于 2018-04-08T07:23:26.183 回答