找不到查询参数时如何重定向或阻止Cloudfront网址

时间:2020-08-26 17:27:07

标签: amazon-s3 aws-lambda amazon-cloudfront aws-lambda-edge

我将s3资源映射到了Cloudfront中以缓存图像,但我尝试不成功地重定向到另一个页面。

cloufront URL在下面类似

http://d39o2548cde2323.cloudfront.net/product_images/1/7895000483853/7895000483853_1_1_1200_72_RGB.png?**pid=12&cmid=12&hash=12314121cwdfiwjdif* *

product_images / 1/7895000483853 / 7895000483853_1_1_1200_72_RGB.png-> s3对象 pid = 12&cmid = 12&hash = 12314121cwdfiwjdif->网址中的参数

当找不到pid,cmid或其他参数时,我需要进行块显示或下载由clound映射的s3图像。

我创建了一个lambda边缘并在cloudfront触发器中设置了行为,但是页面没有重定向。

我的lambda代码就像下面这样:

'use strict';

exports.handler = (event, context, callback) => {
    const request = event.Records[0].cf.request;
    const headers = request.headers;

    console.log("request.uri " + request.uri);
    console.log("request.querystring " + request.querystring);
    
    console.log("##############################################");
    console.log("################# CLOUDFRONT S3  #############################");
    console.log("##############################################");

    if (request.querystring.includes("pid") && request.querystring.includes("cmid")) {
        console.log("OK contains params");
        callback(null, request);
        return;
    }else{
        console.log("ERROR not contains params");
        const redirectResponse = {
        status: '403',
        statusDescription: 'Not Allowed',
        headers: {
          'location': [{
            key: 'Location',
            value: '/403/index.html',
          }],
          'cache-control': [{
            key: 'Cache-Control',
            value: "max-age=3600"
          }],
        },
        };
        console.log("Redirecting");
        callback(null, redirectResponse);
    }
};

1 个答案:

答案 0 :(得分:0)

页面未重定向

您没有返回重定向,而是返回status: '403',这是一个错误响应,表示Forbidden。在这种情况下,Location标头没有任何意义。

假设您要重定向,请将status代码更改为302或307。我不确定,因为重定向(根据定义)会更改浏览器地址栏中的URL。