除1个单页外,强制整个网站上的HTTPS重定向

时间:2018-04-05 16:25:47

标签: .htaccess ssl cloudflare cloudflare-workers

我的SSL由cloudFlare管理,但我更喜欢使用htaccess方法来控制网站重定向以使用HTTPS。我有一个域www.mysite.com和一个子域demo.mysite.com。我想在www.mysite.com的完整网站和demo.mysite.com的完整网站上使用HTTPS,除了我的子域名上只有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方法。请帮帮我,告诉我该怎么做?

2 个答案:

答案 0 :(得分:1)

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

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

第一条规则:

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

SSL: Off

第二条规则:

http://*.domain.com/*

Always Use HTTPS  

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

希望这有帮助!

enter image description here

答案 1 :(得分: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();,请在此之后立即放置此代码。这是一个很好的做法。