fix: trim away trailing slash

This commit is contained in:
Christel Westerberg
2024-07-01 10:08:18 +02:00
parent fddee6b53f
commit 9b4fde334f
4 changed files with 19 additions and 3 deletions

View File

@@ -4,6 +4,7 @@ import { findLang } from "@/constants/languages"
import { notFound } from "@/server/errors/next" import { notFound } from "@/server/errors/next"
import { resolve as resolveEntry } from "@/utils/entry" import { resolve as resolveEntry } from "@/utils/entry"
import { removeTrailingSlash } from "@/utils/url"
import { getDefaultRequestHeaders } from "./utils" import { getDefaultRequestHeaders } from "./utils"
@@ -15,7 +16,9 @@ export const middleware: NextMiddleware = async (request) => {
const { nextUrl } = request const { nextUrl } = request
const lang = findLang(nextUrl.pathname)! 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 searchParams = new URLSearchParams(request.nextUrl.searchParams)
const { contentType, uid } = await resolveEntry(pathNameWithoutLang, lang) const { contentType, uid } = await resolveEntry(pathNameWithoutLang, lang)

View File

@@ -1,5 +1,7 @@
import { findLang } from "@/constants/languages" import { findLang } from "@/constants/languages"
import { removeTrailingSlash } from "@/utils/url"
import type { NextRequest } from "next/server" import type { NextRequest } from "next/server"
export function getDefaultRequestHeaders(request: NextRequest) { export function getDefaultRequestHeaders(request: NextRequest) {
@@ -9,9 +11,11 @@ export function getDefaultRequestHeaders(request: NextRequest) {
headers.set("x-lang", lang) headers.set("x-lang", lang)
headers.set( headers.set(
"x-pathname", "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 return headers
} }

View File

@@ -11,6 +11,7 @@ jiti("./env/client")
const nextConfig = { const nextConfig = {
poweredByHeader: false, poweredByHeader: false,
eslint: { ignoreDuringBuilds: true }, eslint: { ignoreDuringBuilds: true },
trailingSlash: false,
experimental: { experimental: {
serverActions: { serverActions: {
allowedOrigins: [ allowedOrigins: [

View File

@@ -1,3 +1,11 @@
export function removeMultipleSlashes(str: string) { export function removeMultipleSlashes(str: string) {
return str.replaceAll(/\/\/+/g, "/") return str.replaceAll(/\/\/+/g, "/")
} }
export function removeTrailingSlash(pathname: string) {
if (pathname.endsWith("/")) {
// Remove the trailing slash
return pathname.slice(0, -1)
}
return pathname
}