从http切换到https会在不同的浏览器上出现不同的错误?

时间:2012-09-07 11:18:49

标签: php .htaccess browser https ssl-certificate

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

我在 .htaccess config.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

BUT

当我运行网站时,它会在不同的浏览器上出现不同的错误,而且非常烦人。以下是不同浏览器的错误说明

IE8

  

它始终提示安全性错误和
   如果我点击是然后显示一切正常,除了左面板
  如果我点击否,那么网址附近的证书错误,但网站工作正常。

Chrome(v:20.0.1132.8)

  

以下列格式显示有关css和js的多个警告(请参阅控制台中):

     

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

     

但是如果您查看login page的来源,那么您可以看到每一个   与https://一起运行的 css js

Firefox(v 16.0)

  

它显示锁定标志(安全)只是几秒钟然后消失了    (我很惊讶它永远不会提示https的安全警报)   但是当我们选择页面信息 - >媒体然后许多图片来自 http://

请您检查并告诉我究竟是什么问题?

我还想知道一件事。

  

如果https://页面没有正确显示,那么哪一页负责

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

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

由于

2 个答案:

答案 0 :(得分: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 :(得分:0)

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

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

这意味着所有链接都来自此并正确解析。

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