首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用S3和Cloudfront重定向内部和外部URL

用S3和Cloudfront重定向内部和外部URL
EN

Stack Overflow用户
提问于 2022-01-19 16:29:53
回答 1查看 376关注 0票数 1

我想做两件事

  1. 希望动态地创建301和302重定向。
  2. 想重定向到外部URL

我有盖茨比4.2.0版本。

我从Sanity获得重定向数据,并在gatsby-node.js中创建重定向

代码语言:javascript
复制
 if (redirects && redirects.length > 0) {
   redirects.forEach((redirect) => {
     createRedirect({
       fromPath: redirect.fromPath,
       toPath: redirect.toPath,
       statusCode: rarseInt(edirect.statusCode),
       force: true,
  });
});

示例从Sanity重定向数据:

代码语言:javascript
复制
[
 {
  _id: 'b6b1a54e-9642-4509-a691-9b183d15b681',
  _createdAt: '2022-01-18T15:25:57Z',
  fromPath: '/test/',
  statusCode: '301',
  toPath: '/services/'
},
{
  _id: 'f8f1c364-0305-4848-9f89-750d8eaadcee',
  _createdAt: '2022-01-19T13:49:56Z',
  fromPath: '/test2/',
  statusCode: '302',
  toPath: 'www.google.com'
} ]

我使用的是gatsby插件-s3,它检测创建重定向,并在构建时在.cache目录中创建:.cache目录。

但是,我可以看到,createRedirect()中设置的statusCode总是302,而不是301

做这件事最好的方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2022-01-31 12:02:03

我无法修复gatsby-plugin-offline.中始终设置为302的状态代码。此外,我还想实现内部和外部重定向。

我对此的解决方案是在构建时使用gatsby-node.js,而不是使用createRedirect().在从redirects.json 获取重定向之后,我将创建文件,其中重定向(FROM和TO)是完整URLS (例如:https://test.com/test/)。

代码语言:javascript
复制
const fs = require("fs");

 if (redirects && redirects.length > 0) {
    let r = [];
    redirects.forEach((redirect) => {
  
        let fromPathSplit = redirect.fromPath.split("://")[1].split("/");
        fromPathSplit.shift();
        const keyCondition = fromPathSplit.join("/");
        const toPathSplit = redirect.toPath.split("://");
        const redirectProtocol = toPathSplit[0];
        const urlSplit = toPathSplit[1].split("/");
        const hostName = urlSplit[0];
        const path = urlSplit.slice(1).join("/");
        r.push({
          RoutingRuleCondition: {
            KeyPrefixEquals: keyCondition,
          },
          RedirectRule: {
            ReplaceKeyWith: path,
            HttpRedirectCode: redirect.statusCode,
            Protocol: redirectProtocol,
            HostName: hostName,
          },
        });
    });
    fs.writeFile("redirects.json", JSON.stringify(r), function (err) {
      if (err) console.log("creating redirects.json file error", err);
    });
  }

在创建redirects.json之后,我将其设置为RoutingRules配置,用于我的S3 Bucket

代码语言:javascript
复制
 FrontendBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: ${self:custom.frontendBucketName}
        AccessControl: PublicRead
        WebsiteConfiguration:
          IndexDocument: index.html
          ErrorDocument: 404.html
          RoutingRules: ${file(./redirects.json)}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70774287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档