【问题标题】:HTTPS only on specific pages - Htaccess, Apache, OpenSSLHTTPS 仅在特定页面上 - Htaccess、Apache、OpenSSL
【发布时间】:2014-10-23 19:49:42
【问题描述】:

我正在尝试让 HTTPS 按我的意愿工作,但没有运气。 我喜欢做的是我希望网站在特定的 url 上通过 http 和 https。具体网址是:reg.php & glomtpass.php。

但是当我尝试代码时,它说:“这个网页有一个重定向循环”。经过一堆尝试,它仍然有这个错误。

我现在在 .htacess 中使用的 HTTP -> HTTPS 代码:

RewriteCond %{HTTPS} on
RewriteCond %{SCRIPT_FILENAME} !\/(reg|glomtpass)\.php [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

感谢任何帮助!

【问题讨论】:

  • 不确定,但看看这里的突出显示,你的重写规则中的 // 是否需要转义?
  • 您在所有页面上都有需要的函数文件吗? (如果是这样,我有一个很好的解决方案,不涉及重写)
  • 如果您有 SSL,为什么不在所有页面上使用它?
  • @Hampeee 修复脚本,然后。
  • @Hampeee: “因为某些脚本在通过 SSL 发送和接收信息时存在问题。这就是为什么我只希望某些页面被强制使用 SSL” - 这会让你和您的用户到stripping attacks。坏主意。

标签: php apache .htaccess ssl https


【解决方案1】:

如果将函数文件添加到页面顶部不是太麻烦,那么这就是我在 php.ini 中检查进出 HTTPS 的方式。要使用它,只需要你在所有脚本中放入的文件。

函数文件

<?php

$scriptsWithSSL = array('reg.php','glomtpass.php');
if (in_array(end(explode('/', $_SERVER['PHP_SELF'])), $scriptsWithSSL) === true) {
    //we are on a page we want to be HTTPS. will become HTTPS if requested with HTTP
    if ($_SERVER['HTTPS'] == '' || $_SERVER['HTTPS'] == 'off') {
        header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . $_SERVER['QUERY_STRING']);
        exit;
    }
} else {
    //page should not be HTTPS and will move to HTTP if requested with HTTPS
    if (strtolower($_SERVER['HTTPS']) == 'on') {
        header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . $_SERVER['QUERY_STRING']);
        exit;
    }
}
?>

如果 HTTPS 未请求该脚本,则将在 $scriptsWithSSL 数组中找到的任何脚本移动到 HTTPS。否则,它是一个普通页面,如果没有使用 HTTP 请求,它将从 HTTPS 移动到 HTTP。

【讨论】:

  • 非常感谢您的帮助,但最后一个也不起作用。它适用于 IE 11.0.9,但不适用于 Google Chrome 或 Opera
  • 你能给我一个链接到有问题的页面吗?
  • 哦,你有那些重写规则吗?这可能会导致无限循环。
  • 它们用“#”关闭
  • 从 HTTP 切换到 HTTPS 时是否会出现死循环?
猜你喜欢
  • 2012-11-07
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多