Я нахожусь в немного неудачном положении, когда выбор дизайна кого-то лет go теперь влияет на мою реконструкцию веб-сайта. По сути, еще когда сайт был изначально создан, дизайнер настаивал на том, чтобы все URL-адреса были полностью явными с расширениями. html (например, website.com/index.html). В настоящее время я нахожусь в процессе перестройки сайта с помощью Gatsby, и мое внимание пришло к выводу, что нам необходимо продолжить разрешение этих старых URL-адресов, поскольку они все еще разбросаны по inte rnet в виде ссылок. Но владелец хотел бы отойти от этих URL-адресов в будущем, поэтому в основном мне просто нужно поддерживать их разрешение для обратной совместимости.
Я работал с функцией onCreatePage и могу заставить ее разрешить. html ссылки вроде этого:
exports.onCreatePage = async ({ page, actions }) => {
const { createPage } = actions;
console.log(actions);
// Create resolvers for all pages with .html in URLs
if (!page.path.endsWith(".html")) {
const isIndex = page.path === "/";
page.matchPath = isIndex
? page.path + "/index.html"
: page.path.replace(/\/$/, ".html");
createPage(page);
}
};
Но, к сожалению, это разрешает только URL-адреса. html, а не простые URL-адреса без суффикса html.
Есть ли способ, которым я могу добиться этого? Должен ли я искать другой API, чем onCreatePage?
UPDATE: Только что нашел gatsby-plugin-client-side-redirect и попробовал следующее:
exports.onCreatePage = async ({ page, actions }) => {
const { createRedirect } = actions;
// Create resolvers for all pages with .html in URLs
if (!page.path.endsWith(".html")) {
const isIndex = page.path === "/";
const legacyUrl = isIndex
? page.path + "/index.html"
: page.path.replace(/\/$/, ".html");
console.log("legacyUrl::", legacyUrl);
createRedirect({ fromPath: legacyUrl, toPath: page.path, isPermanent: true });
}
};
Консоль выводит правильные старые URL-адреса, но не перенаправляет ... не уверен, что я делаю не так ...