Middleware URL normalization does not respect skipTrailingSlashRedirect
#66753
Labels
bug
Issue was opened via the bug report template.
Middleware
Related to Next.js Middleware.
Pages Router
Related to Pages Router.
Link to the code that reproduces this issue
https://codesandbox.io/p/devbox/vigorous-wilson-25ycfg
To Reproduce
Current vs. Expected behavior
Current: always returns pathname
/foo
Expected: returns
/foo
or/foo/
depending on the linkProvide environment information
Operating System: Platform: linux Arch: x64 Version: #1 SMP PREEMPT_DYNAMIC Sun Aug 6 20:05:33 UTC 2023 Available memory (MB): 4102 Available CPU cores: 2 Binaries: Node: 20.9.0 npm: 9.8.1 Yarn: 1.22.19 pnpm: 8.10.2 Relevant Packages: next: 15.0.0-canary.25 // Latest available version is detected (15.0.0-canary.25). eslint-config-next: N/A react: 19.0.0-beta-04b058868c-20240508 react-dom: 19.0.0-beta-04b058868c-20240508 typescript: 5.1.3 Next.js Config: output: N/A
Which area(s) are affected? (Select all that apply)
Middleware, Pages Router
Which stage(s) are affected? (Select all that apply)
next dev (local), next build (local), next start (local), Vercel (Deployed), Other (Deployed)
Additional context
The issue turns up in conjunction with
config.skipTrailingSlashRedirect
being set totrue
.The issue leads to all client-side navigation locking up in an infinite redirect loop when using middleware to redirect to trailing slash variants of the same url, e.g. from
/foo
to/foo/
. In the middleware the pathname is still/foo
even after the redirect, which starts the loop.The issue (most likely) stems from the URL normalization that Next.js applies to
/_next/data/*
urls. The respective.json
URLs are always normalized to whateverconfig.trailingSlash
is set to, disregarding the setting ofconfig.skipTrailingSlashRedirect
.This seems related, but not identical, to #66738. The source of the error could be close to the source of #58320 as well.
From the looks of it, this doesn't affect the app router. Here the
pathname
looked correct in both cases in a quick sandbox repro.The text was updated successfully, but these errors were encountered: