CSS 文件中的 URL 未通过 django-storages 进行签名

问题描述 投票:0回答:1

例如,我的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 中的该死的背景图像没有签名!

django amazon-s3 amazon-cloudfront django-storage
1个回答
0
投票

我最终选择了第二个公共存储桶,尽管这违背了使用云前端的全部目的。至少我的大部分内容将通过签名网址传递,这总比没有好。

我从类似的问题中得到了这个想法: 静态网站私有内容 Amazon S3 和 Cloudfront - css、js 和图像不显示

© www.soinside.com 2019 - 2024. All rights reserved.