仅在使用PHP的某些页面上强制使用SSL


Force SSL only on certain pages with PHP

我找到了一个解决方案,可以将WordPress网站上的一个页面设置为使用https,尽管我正在尝试将ssl应用于两个页面而不是一个页面。我尝试过各种if或语句,但似乎无法获得正确的语法。

下面是我的if语句,它在一个页面上完美地工作:

if (!empty($_SERVER['HTTPS']) && !empty($_SERVER['REQUEST_URI']))
   { 
   if ($_SERVER['HTTPS'] == 'on' && $_SERVER['REQUEST_URI'] != '/bill-pay/')
       {
         header("Location:http://example.com{$_SERVER['REQUEST_URI']}", 301);
         exit;
       }
   elseif ($_SERVER['HTTPS'] != 'on' && $_SERVER['REQUEST_URI'] == '/bill-pay/') 
       {
         header("Location: https://example.com{$_SERVER['REQUEST_URI']}", 301);
         exit;
       }
   }

为了清楚起见,我只添加了适用于一页的版本。

请记住,只有效地保护部分网站意味着几乎没有任何安全性。通过MITM或其他漏洞,攻击者可以在攻击者的控制下轻松地将安全页面的链接重写到外部页面。

请记住,SSL不仅是一个安全的连接,而且是为了证明你(=你的网站)的真实身份。请确保整个网站的安全,通过SSL实验室运行,遵循其建议。这对每个人都更好,尤其是你的客户。

会直接想到。。。

if (!empty($_SERVER['HTTPS']) && !empty($_SERVER['REQUEST_URI']))
{ 
   if ($_SERVER['HTTPS'] == 'on' && !($_SERVER['REQUEST_URI'] == '/bill-pay/' || $_SERVER['REQUEST_URI'] == '/other-page/'))
   {
     header("Location:http://example.com{$_SERVER['REQUEST_URI']}", 301);
     exit;
   }
   elseif ($_SERVER['HTTPS'] != 'on' && ($_SERVER['REQUEST_URI'] == '/bill-pay/' || $_SERVER['REQUEST_URI'] == '/other-page/')) 
   {
     header("Location: https://example.com{$_SERVER['REQUEST_URI']}", 301);
     exit;
   }
}

应该完成

编辑

考虑到以下注释,此代码可能更合适:

if (isset($_SERVER['REQUEST_URI']) && ($_SERVER['REQUEST_URI'] == '/bill-pay/' || $_SERVER['REQUEST_URI'] == '/other-page/'))
{
   if (!isset($_SERVER['HTTPS']) || empty($_SERVER['HTTPS'])) 
   {
      header("Location: https://example.com{$_SERVER['REQUEST_URI']}", 301);
      exit;
   }
} 
else 
{
   if (isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS'])) 
   {
      header("Location: http://example.com{$_SERVER['REQUEST_URI']}", 301);
      exit;
   }
}

请记住,如果未设置值,则empty()解析为false;)