我的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方法。请帮帮我,告诉我该怎么做?
答案 0 :(得分:1)
我在Cloudflare中具有灵活Cloudflare证书的域中进行以下工作。
我没有使用.htaccess,而是使用了2个Cloudflare页面规则。
第一条规则:
*.domain.com/page-to-ignore.htm
SSL: Off
第二条规则:
http://*.domain.com/*
Always Use HTTPS
订单很重要,在您自己的网站上进行测试时,请确保已清除浏览器缓存。
希望这有帮助!
答案 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();
,请在此之后立即放置此代码。这是一个很好的做法。