首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTTPS重定向站点

HTTPS重定向站点
EN

Stack Overflow用户
提问于 2018-12-22 08:39:25
回答 1查看 56关注 0票数 0

我试图将我的网站重定向到在HTTPS中始终开放。我正在使用CloudFlare,他们有一个设置为“始终使用HTTPS”。但是在我的网站上有一个页面,我不想使用HTTPS,因为它在iFrame下打开其他网站。如果该页面也加载到HTTPS中,那么在iFrame下,任何未被HTTPS提及的网站都不会打开。因此,对于这个特定的页面,我想让网站在HTTP下打开。

我正在做的事情:

  1. 在CloudFlare密码设置中,“始终使用HTTPS”是打开的。
  2. 然后在我的页面中,我希望它在HTTP下打开,比如surf.php

我使用以下PHP代码:

代码语言:javascript
复制
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();
    }
  }
}

现在,页面没有打开,并说“页面没有正确地重定向”。我该怎么办?还有其他方法来完成这个任务吗?我想在整个网站中使用HTTPS,所以cloudflare中的“始终使用HTTPS”设置应该是打开的,只是surf.php而已。这里最好的方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2018-12-22 08:52:40

听起来你在一个重定向循环中。其中有一个强制HTTPS的.htaccess文件,然后使用PHP重定向到HTTP。然后,该新请求具有适用于它的所有相同规则,以便.htaccess再次将其重定向到HTTPS,以此类推(无限)

因此,我首先要确保您的.htaccess文件中没有强制HTTPS。如果是这样的话,您可以添加一个RewriteCond来排除您的URL:

代码语言:javascript
复制
#RewriteEngine On  #-- if not included elsewhere

#if HTTPS is not on (then continue)
RewriteCond %{HTTPS} !=on

#add this rule in  (if not our page, then redirect to HTTPS)
RewriteCond %{REQUEST_URI} !^/surf\.php$

RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

当mod重写击中一个重写条件,如果它失败(为false),它将忽略下一个重写规则。这样,PHP代码就可以完成它的工作,但也可以单独在htaccess中完成。因为不管怎么说,您都将依赖于URL,所以在.htaccess文件中没有看到任何问题。

这将基本上是相反的上面的,除了你知道的网址。就像这样:

代码语言:javascript
复制
#if HTTPS is not on (then continue)
RewriteCond %{HTTPS} !=on
#add this rule in  (if not our page, then redirect to HTTPS)
RewriteCond %{REQUEST_URI} !^/surf\.php$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

#if HTTPS is not off (then continue)
RewriteCond %{HTTPS}!=off
#  (if is our page, then redirect to HTTP)
RewriteCond %{REQUEST_URI} ^/surf\.php$
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

不过,我真的不能测试这个,但这是一般的想法。如果HTTPS没有关闭,并且%{REQUEST_URI}是我们的页面!^/surf.php$重定向到HTTP.基本上,你必须通过HTTPS规则打一个洞,然后强制http。

我非常肯定,对于%{REQUEST_URI},您只需检查它是否以您的URL开始(减去主机和协议)。

我承认我对复杂的HTACCESS规则有点生疏,被MVC路由器破坏了,所以这很可能不是100%正确的。但总体观点是合理的。

希望能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53894196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档