Middleware redirect behavior between subdomains is not working as expected.
The issue involves incorrect redirect behavior in Next.js middleware when moving from a subdomain to an apex domain. The problem is reproducible with clear steps, but the solution may require understanding of middleware and subdomain handling. There are related discussions and PRs but no clear solution yet.
https://github.com/bentron2000/next-response-bug-report
Set /etc/hosts:
127.0.0.1 example.test
127.0.0.1 foo.example.test
Install Packages:
npm i
Start Server:
npm run dev
Then Navigate to the following link and observe the result. 'http://foo.example.test:3000/shouldredirect'
When you navigate to the 'http://foo.example.test:3000/shouldredirect' Middleware should select for this route and redirect to the apex domain '/login' page
Expected Result: Redirect to : 'http://example.test:3000/login' -> 'Hooray - we redirected properly'
Actual Result: Redirect to : 'http://foo.example.test:3000/login' -> 'Should not be redirected here'
Operating System:
Platform: darwin
Arch: arm64
Version: Darwin Kernel Version 24.2.0: Fri Dec 6 18:51:28 PST 2024; root:xnu-11215.61.5~2/RELEASE_ARM64_T8112
Available memory (MB): 16384
Available CPU cores: 8
Binaries:
Node: 20.10.0
npm: 10.8.1
Yarn: 1.22.22
pnpm: 9.15.0
Relevant Packages:
next: 15.2.0-canary.19 // Latest available version is detected (15.2.0-canary.19).
eslint-config-next: N/A
react: 19.0.0
react-dom: 19.0.0
typescript: 5.7.3
Next.js Config:
output: N/A
Middleware
next dev (local)
NextResponse.redirect() BugDemonstrates that NextResponse.redirect is not obeying explicit urls when redirecting from a subdomain foo.example.test to the apex domain example.test
In this example, middleware has been set to catch a specific subdomain route and to redirect it to an explicitly set route on the apex domain 'http://foo.example.test:3000/shouldredirect' -> 'http://example.test:3000/login'
This does not happen - it redirects to
Claim this issue to let others know you're working on it. You'll earn 10 points when you complete it!