如何从 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;
}
}
如果我尝试分配 body
或 text
,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
我想从 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;
}
}
如果我尝试分配 body
或 text
,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