You are here

https登录显示的文件链接还是http的链接

ywq111 的头像
Submitted by ywq111 on 星期日, 2013-03-10 13:36

原因:
希望在管理员登录时使用https
但用户查看则使用http
因此网站需要同时启用https和http。

 

问题描述:

js和css的路径都不是相对路径,导致启用https后显示不正常。

在本地机器上测试同时启用http和https
使用https://site.org的方式登录时,显示的文件url还是http的:
比如js和css的,都是以http的方式链接的,这样在chrome浏览器下就显示不正常。
在setting.php中已经设置了$["conf"]=true;
另外$base_url没有做设置。

如果做如下设置:

$base_url='';

此时链接js和css的路径都是相对路径了,网站显示正常了,但是又出现如下错误:

 

Notice: Undefined index: scheme in drupal_settings_initialize() (line 719 of /home/wwwroot/drupal7/includes/bootstrap.inc).

如设置base_url为https的地址:

$base_url='https://site.org';

那么在部分浏览器上又显示不了,js和css都是链接的https的路径;另外,也不利于js和css的压缩。

 

论坛:

Drupal版本:

ywq111 的头像

http://drupal.org/project/securepages

这个模块我知道,它支持的ssl协议是mixer的。就是http和https混合的方式,似乎不大适合。具体的,我再测试一下看看,但终究不是很合适,因为http和https混合的方式,http的cookie还是可以被劫持的。

我现在是需要在http登录的时候正常显示http,https的时候则完全使用https的方式。

因为https只在管理时使用,证书是自签名的。目前通过设置base_url的为https://site.org的方式可以正常使用https,但是那样的话http访问的时候也使用了https链接js和css,那样会因为证书错误而导致js和css不能正常加载,导致页面显示不正常。

如果设置base_url为http://site.org的方式,则IE访问每次会提示有未加密内容是否显示,而chrome则直接把页面显示得乱乱的。

g089h515r806 的头像

办法肯定是有的,你可以在html.tpl.php里面写个IF语句:

当当前用户为管理员时,手动的把JS/CSS文件输出出来,把https写死在里面。

 

另外就是实现hook_page_alter,对script, styles变量进行操作,如果里面已经是以http开头了,将它们替换成https即可。