3

我想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进行了一些更改,这是必需的,也是网站的第一个文件

配置文件

$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

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

铬 (v:20.0.1132.8)

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

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

但是如果您查看登录页面的源代码,那么您可以看到每个 cssjs都在运行https://

火狐 (v 16.0)

它仅显示几秒钟的锁定标志(安全)然后消失
(我很惊讶它从未提示 https 的安全警报)但是当我们使用 页面信息 - > 媒体时,许多图像都来自http://

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

我还想知道一件事。

如果https://页面显示不正确,那么由哪一个负责

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

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

谢谢

4

2 回答 2

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://

于 2012-09-07T11:35:45.210 回答
0

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

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

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

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

于 2012-09-07T11:32:44.957 回答