CSS文件中的URL没有通过django-storages签名

fiei3ece  于 2023-10-21  发布在  Go
关注(0)|答案(1)|浏览(66)

例如,我的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,而不会签名(没有参数)。下面是生成的请求头。请注意,referer URL是签名的,但CSS中的背景图像不是!

cygmwpex

cygmwpex1#

我最终选择了第二个公共桶,尽管这违背了使用cloudfront的全部目的。至少我的大部分内容将通过签名的网址,这比没有好。
我从一个类似的问题中得到了这个想法:Static website private content Amazon S3 and Cloudfront - css, js and images not showing

相关问题