将页面强制为https,然后再将其他页面强制返回

时间:2011-11-17 15:30:16

标签: php redirect

php我需要始终保持安全,所以我发现了这个:

<?php if($_SERVER['SERVER_PORT'] != '443') { header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); exit(); }?>

将页面重定向为使用https。

但当他们从该安全页面浏览到y.php时,我需要返回http。

我用过:

<?php if($_SERVER['SERVER_PORT'] != '80') { header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); exit(); }?>

编辑生病解释一个liitle更抱歉。

我有一个wordpress网站,我需要1个页面强制使用HTTPS,而其他所有网站都不使用HTTP。

页面本身称为/ help,wordpress安装使用永久链接。

如果用户要浏览HTTP上的任何其他页面,例如/ hello,则需要强制它们返回http

希望这会有所帮助

3 个答案:

答案 0 :(得分:2)

我想我理解你的要求,这将确保/ help始终是https,并且所有其他路径都在http protocal下

<强> PHP

$request = strtolower(trim($_SERVER['REQUEST_URI']));

if (0 === strpos($request, '/help')) { // liberal matches
//if (preg_match('/^\/help\/?$', $request)) { //conservative
        if ($_SERVER['HTTPS'] != 'on') {
            header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
            exit;
        }
    } else if ($_SERVER['HTTPS'] == 'on') {
        header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
        exit;
    }

.htaccess *(启用mod_rewrite)*

RewriteEngine On

RewriteCond %{REQUEST_URI} ^/help\/? #liberal matches /help /helped /helper
#RewriteCond %{REQUEST_URI} ^/help\/?$ #conservative matches /help and /help/
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

RewriteCond %{HTTPS} =on
RewriteCond %{REQUEST_URI} !^/help      #liberal matches /help /helped /helper
#RewriteCond %{REQUEST_URI} !^/help\/?$ #conservative matches /help and /help/
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R,L]

答案 1 :(得分:0)

使用下面的函数检查当前页面是否为SSL,它在一个广受欢迎的社区php库中使用:

/**
 * Check if the current page is SSL
 */
function securepages_is_secure() {
  return (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? TRUE : FALSE;
}

然后在页面没有表单时重定向您的用户,securepages_is_secure()返回TRUE。

答案 2 :(得分:0)

此htaccess解决方案是否有帮助:

<Location /form.php>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Location>
希望有所帮助