使用缓存清单/应用缓存时重定向到HTTPS

时间:2016-02-18 21:19:40

标签: .htaccess ssl html5-appcache cache-manifest

我遇到了一个挑战,即将我的网站转换为使用https会导致缓存清单出现问题。我在chrome中遇到如下错误:Application Cache Error event: Manifest fetch failed(4) http://www.bibletools.info/cache.manifest

在Safari中,我收到重定向循环错误。

这是我用来重定向的htaccess代码:

RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

这是我的缓存清单的样子:

CACHE MANIFEST
# February 18, 2016 v1

CACHE:
/
/assets/app.min.css?v=1.4
https://fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic
https://fonts.googleapis.com/css?family=Raleway:400,300,700
https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js
https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css
/assets/app.min.js?v=1.3

NETWORK:
*
HTTP://*

据我所知,清除浏览器缓存通常似乎可以解决问题,但我的用户并不知道该解决方案。如何将它们转换为安全服务器?

1 个答案:

答案 0 :(得分:2)

两个选项;

  1. 更改清单文件的名称(将其命名为manifest.appcache或其他内容)。这样,旧的缓存页面在尝试访问cache.manifest文件时将收到404错误。 404表示浏览器将完全删除缓存(按此处),然后重新开始; http://www.html5rocks.com/en/tutorials/appcache/beginner/

  2. 将重写规则更改为以下内容;

    RewriteRule ^((?!cache\.manifest).)*$ https://%{SERVER_NAME}/$1 [R,L]
    

    这将允许HTTP流量到您的清单,以便旧缓存可以自行更新。

    您还需要对清单文件进行少量更改,以便旧缓存下载所有文件的新版本。这可以只是在清单中添加注释或增加版本号。

  3. 如果您不关心当前人们缓存的内容并且只想在HTTPS上重新开始,则可以使用选项1。如果您不想更改缓存的名称并且不希望用户必须重新下载所有缓存文件,则可以使用选项2。