`usePathname` returns internal rewrite path instead of canonical URL
#1 348 ouverte le 20 mai 2026
Métriques du dépôt
- Stars
- (8 624 étoiles)
- Métriques de merge PR
- (Merge moyen 1j 1h) (462 PRs mergées en 30 j)
Description
This issue was created by an agent analysing CI failures from the Next.js Deploy Suite (vinext
mainvs Next.jsv16.2.6, 2026-05-20).
Problem
When middleware rewrites /rewritten-use-pathname to /hooks/use-pathname, usePathname() should return the external/canonical URL (/rewritten-use-pathname) that the user sees in the address bar. vinext returns the internal route path (/hooks/use-pathname).
Expected: "/rewritten-use-pathname"
Received: "/hooks/use-pathname"
Estimated Impact
~1 test failure.
Affected Test Suites
test/e2e/app-dir/hooks/hooks.test.ts(1 failure)
Recommendation
-
Reproduce first in vinext's own test suite. Add a test with a middleware rewrite and a component that calls
usePathname(). Assert it returns the external URL, not the internal rewrite target. Confirm it fails. -
Preserve the original request path in navigation context. The
setNavigationContext()call should use the originalreq.url(external/canonical path) rather than the post-rewrite path. The internal rewrite target is used for route matching but should not be exposed tousePathname(). -
Check both
entries/app-rsc-entry.tsandserver/dev-server.ts. The navigation context should carry the original pathname in both dev and production.