Lambda@Edge 函数的 Node.Js 301 url-rewrite 问题
Posted
技术标签:
【中文标题】Lambda@Edge 函数的 Node.Js 301 url-rewrite 问题【英文标题】:Node.Js 301 url-rewrite issues for Lambda@Edge function 【发布时间】:2020-06-24 21:04:17 【问题描述】:将我的静态站点移动到新域,同时需要从站点上的每个 url 中删除最后一个斜杠,并使用 Lambda 函数发送 301 响应。它应该是这样的:
oldsite.com/any-page/ 将变为 newsite.com/any-page
我找到了一个代码示例来帮助我更改域,但是现在旧站点上的每个页面都会指向新站点的主页,而忽略更改路径功能。
这是我现在使用的代码,路径切换不正确:
'use strict';
exports.handler = (event, context, callback) =>
/*
* Generate HTTP redirect response with 301 status code and Location header.
*/
const request = event.Records[0].cf.request;
// get the original URL path
const path = request.uri
const baseURI = 'https://newsite.com'
// construct the response
const response =
status: '301',
statusDescription: 'Found',
headers:
location: [
key: 'Location',
value: baseURI,
],
,
;
// Configure the URL redirects
switch(path)
case /\/.*\//:
response.headers.location[0].value = baseURI + /\/.*/;
break;
default:
response.headers.location[0].value = baseURI;
callback(null, response);
;
当我尝试实际路径时,这里的罪魁祸首似乎是正则表达式:
switch(path)
case '/foo/':
response.headers.location[0].value = baseURI + '/foo';
break;
它完美地工作并进行了切换。我在这里错过了什么?
【问题讨论】:
【参考方案1】:在挖掘和玩弄之后,我管理了一个实际的代码,它可以工作并且看起来比原来的代码更有效率。它似乎为我完成了这项工作,至少对于这个特定的用例。我可能会根据需要添加更多条件。
'use strict';
exports.handler = (event, context, callback) =>
/*
* Generate HTTP redirect response with 301 status code and Location header.
*/
const request = event.Records[0].cf.request;
// get the original URL path
const baseURI = 'https://newsite.com'
const path = request.uri.replace(/\/$/, '')
const newURI = baseURI+path
// construct the response
const response =
status: '301',
statusDescription: 'Found',
headers:
location: [
key: 'Location',
value: newURI,
],
,
;
callback(null, response);
;
【讨论】:
以上是关于Lambda@Edge 函数的 Node.Js 301 url-rewrite 问题的主要内容,如果未能解决你的问题,请参考以下文章
AWS lambda 和 AWS Lambda@EDGE 有啥区别?
如何在使用 lambda@edge 调整图像大小时修复访问被拒绝错误