From 9b4fde334f72110477546fcddb756dd10eb1e562 Mon Sep 17 00:00:00 2001 From: Christel Westerberg Date: Mon, 1 Jul 2024 10:08:18 +0200 Subject: [PATCH] fix: trim away trailing slash --- middlewares/cmsContent.ts | 5 ++++- middlewares/utils.ts | 8 ++++++-- next.config.js | 1 + utils/url.ts | 8 ++++++++ 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/middlewares/cmsContent.ts b/middlewares/cmsContent.ts index 85e95832b..96b591793 100644 --- a/middlewares/cmsContent.ts +++ b/middlewares/cmsContent.ts @@ -4,6 +4,7 @@ import { findLang } from "@/constants/languages" import { notFound } from "@/server/errors/next" import { resolve as resolveEntry } from "@/utils/entry" +import { removeTrailingSlash } from "@/utils/url" import { getDefaultRequestHeaders } from "./utils" @@ -15,7 +16,9 @@ export const middleware: NextMiddleware = async (request) => { const { nextUrl } = request const lang = findLang(nextUrl.pathname)! - const pathNameWithoutLang = nextUrl.pathname.replace(`/${lang}`, "") + const pathWithoutTrailingSlash = removeTrailingSlash(nextUrl.pathname) + + const pathNameWithoutLang = pathWithoutTrailingSlash.replace(`/${lang}`, "") const searchParams = new URLSearchParams(request.nextUrl.searchParams) const { contentType, uid } = await resolveEntry(pathNameWithoutLang, lang) diff --git a/middlewares/utils.ts b/middlewares/utils.ts index feba8f258..3daf5eb43 100644 --- a/middlewares/utils.ts +++ b/middlewares/utils.ts @@ -1,5 +1,7 @@ import { findLang } from "@/constants/languages" +import { removeTrailingSlash } from "@/utils/url" + import type { NextRequest } from "next/server" export function getDefaultRequestHeaders(request: NextRequest) { @@ -9,9 +11,11 @@ export function getDefaultRequestHeaders(request: NextRequest) { headers.set("x-lang", lang) headers.set( "x-pathname", - request.nextUrl.pathname.replace(`/${lang}`, "").replace(`/webview`, "") + removeTrailingSlash( + request.nextUrl.pathname.replace(`/${lang}`, "").replace(`/webview`, "") + ) ) - headers.set("x-url", request.nextUrl.href) + headers.set("x-url", removeTrailingSlash(request.nextUrl.href)) return headers } diff --git a/next.config.js b/next.config.js index ac5c68cea..484a8fd94 100644 --- a/next.config.js +++ b/next.config.js @@ -11,6 +11,7 @@ jiti("./env/client") const nextConfig = { poweredByHeader: false, eslint: { ignoreDuringBuilds: true }, + trailingSlash: false, experimental: { serverActions: { allowedOrigins: [ diff --git a/utils/url.ts b/utils/url.ts index 2f96f782b..51ba2c52d 100644 --- a/utils/url.ts +++ b/utils/url.ts @@ -1,3 +1,11 @@ export function removeMultipleSlashes(str: string) { return str.replaceAll(/\/\/+/g, "/") } + +export function removeTrailingSlash(pathname: string) { + if (pathname.endsWith("/")) { + // Remove the trailing slash + return pathname.slice(0, -1) + } + return pathname +}