我有一个在其他地方设置的特殊URL,无法更改。
mydomain.com/discountCards
每当服务器向mydomain.com/discountCards
发送提取调用时,我都需要从s3存储桶中返回一个JSON
问题是:
我在mydomain.com上使用带有React-Router的react应用程序。因此,转到mydomain.com/discountCards会显示一个白色的反应页面(因为该网址中没有任何内容)
我正在尝试将Cloudfront设置为直接链接到有效的s3 JSON文件-但问题是:
它仅适用于mydomain.com/discountCards.json,不适用于mydomain.com/discountCards
所以。...现在我的s3存储桶中有一个名为DiscountCards.json的文件-但我需要将其作为没有“ .json”的DiscountCard。
还是其他?
如何使用AWS s3,cloudfront和Route 53从s3作为特定域从此s3返回此.json?
就像我说的那样,我使用指向我的s3文件的cloudfront进行了所有设置,但是这要求我在URL中包含文件扩展名(我不能这样做,该URL已经在mydomain.com/ DiscountCards不是discountCards.json)
这是为了使其他网站和应用程序可以获取该URL并返回json。还有其他方法可以实现吗?
答案 0 :(得分:1)
我创建了一个lambda函数,该函数与CloudFront结合使用将帮助您实现所需的内容而无需任何重定向。
创建一个S3存储桶,我将其设置为带有两个文件index.html
和discountCards.json
的静态主机。
Static site Settings
在CloudFront中:-
Cloudfront settings创建一个以S3存储桶静态网站为源的CF。不要使用下拉菜单中的S3存储桶。您使用了不正确的来源,即JSON文件。只能将存储桶用作源,将文件夹用作源路径。
接下来,使用以下代码创建一个lambda函数: Lambda Creation
exports.handler = async (event, context, callback) => {
const request = event.Records[0].cf.request;
const headers = request.headers;
const origin = request.origin;
const response = event.Records[0].cf.response;
console.log("The initial origin is " + JSON.stringify(origin)); //Shows the original origin
console.log("The Initial request is " + JSON.stringify(request)); //Shows the original origin request
const originDomain = origin.custom.domainName;
// Checks the request uri for the `/discountCards` and replaces it with `/discountCards.json
if (request.uri == "/discountCards") {
request.uri = "/discountCards.json";
}
console.log("The final origin is " + JSON.stringify(origin)); //Shows the final origin
console.log("The final request is " + JSON.stringify(request)); //Shows the final request
callback(null, request); };
lambda函数将把request.uri修改为您要提供的文件,并且由于它是由CloudFront提供的,因此浏览器中的URL将保持不变。
保存lambda函数并使用版本号/标记发布它。
转到CloudFront分配>行为(选择默认行为)>编辑。转到页面底部以进行lambda函数关联,选择“ Origin request”,然后粘贴lambda函数ARN(可从lambda函数页面的右上角获取),然后保存并使缓存无效。 It should Look like this. at the end
The bucket with contents of discountCards.json
End Result 瞧!该页面将在所需路径上提供JSON文件!!没有任何重定向。请记住使缓存无效
答案 1 :(得分:1)
所以....现在我的s3存储桶中有一个名为discountCards.json的文件- 但我需要将其作为没有“ .json”的DiscountCard
将文件discountCard.json保存为没有.json扩展名的discountCard。见下图
然后在元数据下的属性上将content-type
添加到application/json
,请参见下图
现在可以通过此网址https://s3.amazonaws.com/stackkkover/discountCards
访问存储桶此答案的灵感来自此帖子https://stackoverflow.com/a/27046083/3521330
我希望这个答案会有所帮助。谢谢。