Php Amazon Cloudfront私有分发-指向CSS内图像的链接
我在Cloudfront中创建了一个私有发行版以防止热链接。我设法用签名的URL创建指向我的对象的链接,现在运行良好 我唯一担心的是,css样式表中的图像链接无法正常工作,因为它们没有签名。例如,如果我有:Php Amazon Cloudfront私有分发-指向CSS内图像的链接,php,amazon-s3,amazon-web-services,amazon-cloudfront,Php,Amazon S3,Amazon Web Services,Amazon Cloudfront,我在Cloudfront中创建了一个私有发行版以防止热链接。我设法用签名的URL创建指向我的对象的链接,现在运行良好 我唯一担心的是,css样式表中的图像链接无法正常工作,因为它们没有签名。例如,如果我有: background-image: url('../img/bg.png'); 背景图像不会显示,因为样式表不包含签名的url,因此Cloudfront拒绝提供内容 我能做些什么来防止这种情况发生吗?有几种方法,每种方法都有缺点 不是静态CSS文件,而是通过模板生成(或者通过其他智能方式将
background-image: url('../img/bg.png');
背景图像不会显示,因为样式表不包含签名的url,因此Cloudfront拒绝提供内容
我能做些什么来防止这种情况发生吗?有几种方法,每种方法都有缺点 不是静态CSS文件,而是通过模板生成(或者通过其他智能方式将资源映射到CloudFront位置)。在这里,您可以通过使用Last Modified和max age缓存头来使用某种程度的缓存。这是最难的解决方案,但可以说是最好的保护 为所有CSS资源设置一个重定向路径,基本上是一个重写CF路径的小脚本(注意只重写CSS资源而不重写其他内容)。这允许您保持当前的静态CSS,但会打开重定向脚本的潜在热链接
介于两者之间的可能是一个cron脚本,它生成静态CSS文件,其中的链接将在1.5d后过期,以减少服务器负载 您可以每一两天旋转一次整个CDN主机名,然后不必更改css中的任何内容(假设css位于CDN上,如示例所示) 这样你的CSS就不需要有签名的URL,你仍然可以同样有效地阻止热链接。在html中使用
标记怎么样?
虽然没有尝试,但可能会有所帮助
另一种选择是使用php生成样式表。例如,获取所有图像的签名URL,然后将其作为变量推送到样式元素 让我退一步问一个基本问题:你真的担心人们把你的图片链接起来吗?真正地如果有人这样做了,它会对你产生什么现实影响?真的吗 如果您有正当理由阻止人们进行热链接,那么我不确定任何CDN服务(在本例中为CloudFront)是否适合您
嘿,我只是说实话…对css文件使用私有发行版通常是一个非常糟糕的主意,因为向css URL添加(可能是不断变化的)过期时间和签名会阻止浏览器缓存它们,因此从一开始就大大降低了使用Cloudfront的有用性
即使你使用了很长的过期时间,如果有人非常想热链接你的css背景图片,那么他只需要设置一个脚本来抓取你的css文件并从中提取图片URL 我最近听说base64编码成html/css。有优点也有缺点,但这可能是你想要的:
这是一个有趣的问题,但我对此表示怀疑。我很惊讶以前没有人遇到过类似的问题,我想在Cloudfront上作为私有发行版托管CSS文件是很常见的(以避免热链接),不是吗?大多数大到需要/想要CDN的站点可能并不太关心热链接。对于任何大型网站来说,这通常都是杯水车薪——特别是当你谈论CSS文件中的内容时。大多数人都不会对布局元素进行热链接。我同意,对布局元素进行热链接是一个非常糟糕的主意,如果你决定移动或删除文件,我的网站将停止工作,我将没有文件副本来修复它。。只需下载并自己托管就更安全了。大的/唯一的图像是我唯一担心的保护是这个
背景图像:文件('../img/bg.png')代码>正确的语法?意思是在CSS中它应该像下面这样背景图像:url('../img/bg.png')我认为你是对的。然而,我主要担心的是,我目前正在我的亚马逊帐户上托管twitter的引导程序。我担心其他人可以链接到它,因为它是一个通用的“框架/设计”。嗯,他们也可以通过Twitter的GitHub帐户直接链接到它。然而,更有可能的是,他们只会为自己下载一份。