例如,我的css代码有这个图像文件:
background: url('/static/studyspot5/images/shapes/footer_sass.png');
它不会在我的 AWS 网站上呈现 我的settings.py中有以下相关代码:
if USE_S3:
STATICFILES_LOCATION = 'static'
MEDIAFILES_LOCATION = 'media'
MEDIA_URL = f'https://{CLOUDFRONT_DOMAIN}/{MEDIAFILES_LOCATION}/'
MEDIA_ROOT = f'https://{AWS_S3_CUSTOM_DOMAIN}/static/{MEDIAFILES_LOCATION}/'
STATIC_URL = 'https://%s/%s/' % (CLOUDFRONT_DOMAIN,STATICFILES_LOCATION)
STATIC_ROOT = 'https://%s/%s/static/' % (AWS_S3_CUSTOM_DOMAIN,STATICFILES_LOCATION)
STORAGES = {
"default": {"BACKEND": 'custom_storages.MediaStorage'},
"staticfiles": {"BACKEND": 'custom_storages.StaticStorage'},
"OPTIONS": {
"bucket_name": AWS_STORAGE_BUCKET_NAME,
"region_name": AWS_S3_REGION_NAME,
# "verify": AWS_S3_VERIFY,
"signature_version": AWS_S3_SIGNATURE_VERSION,
"cloudfront_key_id": AWS_CLOUDFRONT_KEY_ID,
"cloudfront_key": AWS_CLOUDFRONT_KEY,
"custom_domain": CLOUDFRONT_DOMAIN,
},
}
CSS 文件(以及所有其他静态内容)可以作为签名 URL 来使用,例如使用以下代码:
<link rel="stylesheet" href="{% static 'studyspot5/css/style.css' %}">
但是对于 CSS 文件内的 url,它只会传递文件的 url,而不对其进行签名(无参数)。这是生成的请求标头。请注意,引用 URL 已签名,但 CSS 中的该死的背景图像没有签名!
我最终选择了第二个公共存储桶,尽管这违背了使用云前端的全部目的。至少我的大部分内容将通过签名网址传递,这总比没有好。
我从类似的问题中得到了这个想法: 静态网站私有内容 Amazon S3 和 Cloudfront - css、js 和图像不显示。