`usePathname` returns internal rewrite path instead of canonical URL
#1,348 创建于 2026年5月20日
仓库指标
- 星标
- (8,563 个星标)
- PR 合并指标
- (平均合并 1天 1小时) (30 天内合并 462 个 PR)
描述
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.