如何从 CloudFront 函数生成 404 页面?

How to generate a 404 page from a CloudFront Function?

我想从 Cloudfront 函数为一些众所周知的路径生成 404 页面。到目前为止,我能够使用随附的伪代码生成 404 响应,但没有任何正文。文档表明这是可能的,但周围没有示例。

function handler(event) {
    
    // NOTE: This example function is for a viewer request event trigger. 
    // Choose viewer request for event trigger when you associate this function with a distribution. 
    var request = event.request, response = event.response;
    
   
    if (URL_IS_FORBIDDEN) {
        return {
            statusCode: 404,
            statusDescription: "Not Found",
        };
    } else  {
        return request;
    }     
}

如果我尝试分配 bodytext,cloudfront 会说 属性 不存在,实际上 it is not mentioned in the docs.

那么我可以从云端函数输出一个主体吗?

您目前无法 return 来自 CloudFront 函数的响应正文(见下文)。但是您可以 1/ 使用 Lambda@Edge 函数,或者 2/ 覆盖请求 URI 以指向您来源处的 404 URL。

对于数字 2,如果您的 404 文件位于您的来源(例如,在 S3 上)的 /pages/404.html,您可以使用这样的 CloudFront 函数:

function handler(event) {
    var request = event.request;
    
    // Route the request to a 404 page if the URL is not found.
    if (URL_IS_FORBIDDEN) {
        request.uri = '/pages/404.html';
    } 
    return request;
}

When you modify an HTTP response with CloudFront Functions, you cannot alter or modify the response body. If you need to alter the response body, use Lambda@Edge. With Lambda@Edge, you can replace the entire response body with a new one, or remove the response body.

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/writing-function-code.html