我想做两件事
我有盖茨比4.2.0版本。
我从Sanity获得重定向数据,并在gatsby-node.js中创建重定向
if (redirects && redirects.length > 0) {
redirects.forEach((redirect) => {
createRedirect({
fromPath: redirect.fromPath,
toPath: redirect.toPath,
statusCode: rarseInt(edirect.statusCode),
force: true,
});
});示例从Sanity重定向数据:
[
{
_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。
做这件事最好的方法是什么?
发布于 2022-01-31 12:02:03
我无法修复gatsby-plugin-offline.中始终设置为302的状态代码。此外,我还想实现内部和外部重定向。
我对此的解决方案是在构建时使用gatsby-node.js,而不是使用createRedirect().在从redirects.json 获取重定向之后,我将创建文件,其中重定向(FROM和TO)是完整URLS (例如:https://test.com/test/)。
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
FrontendBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: ${self:custom.frontendBucketName}
AccessControl: PublicRead
WebsiteConfiguration:
IndexDocument: index.html
ErrorDocument: 404.html
RoutingRules: ${file(./redirects.json)}https://stackoverflow.com/questions/70774287
复制相似问题