【问题标题】:switching from http to https gives different errors on different browser?从 http 切换到 https 在不同的浏览器上会出现不同的错误?
【发布时间】:2012-09-01 06:38:31
【问题描述】:

我想在https 上运行几个页面,而所有其他页面在http 上运行

我在 .htaccessconfig.inc.php 文件中编写了以下代码

.htaccess

RewriteEngine on
Options +FollowSymLinks 
RewriteBase /

RewriteRule ^login/?$ login.php [NC]

# Rewrite non www to www.charityrummage.com
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# Rewrite to https
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} /login [OR]
RewriteCond %{REQUEST_URI} /do_login.php [OR]
RewriteCond %{REQUEST_URI} /payment/?.*$ 
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]

# traffic to http://, except login.php and payment.php
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !(/login|/do_login.php|/payment)
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]

还对 config.inc.php 进行了一些更改,这是网站的第一个文件和必需的文件

config.inc.php

$ssl_page = array('login.php','do_login.php','payment.php');
// Note: do_login.php is intermediate page
if(in_array(trim($_SERVER['SCRIPT_NAME'],'/'),$ssl_page)){
    define('PROTOCOL','https://');    
 }else{
   define('PROTOCOL','http://');
}
define('DS','/');
define('URL',PROTOCOL.$_SERVER['HTTP_HOST'].DS);
// based on URL i made CSS and JS Path

这是网站链接:

http://www.charityrummage.com.

登录页面已启用 ssl:

https://www.charityrummage.com/login

但是

当我运行该网站时,它会在不同的浏览器上给出不同的错误,这真的很烦人。以下是不同浏览器的错误描述

IE8

它总是提示安全错误和
如果我单击“是”,则显示除左侧面板外的所有内容
如果我单击“否”,则网址附近出现证书错误,但网站工作正常。

Chrome (v:20.0.1132.8)

以以下格式显示有关 css 和 js 的多个警告(见控制台):

https://www.charityrummage.com/login 的页面运行了不安全的内容 来自http://www.charityrummage.com/css/reset.css

但是如果您查看login page 的源代码,那么您可以看到每个 cssjs 使用 https://

运行

Firefox (v 16.0)

它仅显示几秒钟的锁定标志(安全)然后消失
(我很惊讶它从来没有提示过 https 的安全警报) 但是当我们使用 page info -> media 时,许多图像都来自 http://

请您检查并告诉我确切的问题是什么?

还有一件事我想知道。

如果https:// 页面无法正常显示,那么应该由哪个页面负责

  • 操作系统或
  • 浏览器或
  • 服务器或
  • 编程问题或
  • SSL证书问题

    最后解决这个问题的方法是什么?

谢谢

【问题讨论】:

  • 问题是来自https://www.charityrummage.com/css/style.css 的文件被重定向到http 版本。这就是你出错的原因。当您直接调用它们时,it 301 到非安全版本。
  • @j0k 感谢您的帮助。但是如何解决这个问题?
  • 但是如果你看到 登录页面源 那么它会显示 style.csshtps:// 然后你点击它然后它会带你到那个 css
  • 是的,但是对于 css 的非安全版本。这就是为什么您从所有浏览器中收到错误的原因。您可能会发现从 https 调用资产文件时不将资产文件重定向到 http 的规则(我不知道的规则)。
  • 您的最后一条规则强制重定向到 http 用于除页面登录和付款之外的所有 URL。所以css和jpg也被重定向了

标签: php .htaccess browser https ssl-certificate


【解决方案1】:

我之前通过在页面上设置基本 href 来解决这个问题

<base href="<?php echo HTTPS_BASE_REF; ?>"></base>

这意味着所有链接都由此派生并正确解析。

HTTPS_BASE_REF 的常量是在我的 config.inc.php 文件中设置的。

【讨论】:

    【解决方案2】:

    试试这个规则:

    # Force files ending in X to use same protocol as initial request
    RewriteRule \.(gif|jpe?g|png|ico|css|js)$ - [S=1]
    

    或者这个:

    # don't do anything for images/css/js (leave protocol as is)
    RewriteRule \.(gif|jpe?g|png|ico|css|js)$ - [NC,L]
    

    # traffic to http://之前

    【讨论】:

    • +1 你的第二个想法只是从 chrome 中删除警告,但 IE8 仍然显示证书错误,firefox 也显示来自 http:// 链接的图像
    • 你清除了firefox/ie8的缓存了吗?我在 FF15 上,所有图像都通过 https 提供,并且没有重定向。
    • 你能帮我一个忙吗?你能把带有锁标志的ie8的完整截图发给我吗?在imgur.com
    猜你喜欢
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    相关资源
    最近更新 更多