Skip to content

Commit 2012922

Browse files
authored
fix: normalize trailing slash when handling middleware rewrites (#448)
1 parent 309ecbc commit 2012922

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

edge-runtime/lib/response.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ import { HTMLRewriter } from '../vendor/deno.land/x/[email protected]/
33

44
import { updateModifiedHeaders } from './headers.ts'
55
import type { StructuredLogger } from './logging.ts'
6+
import { addMiddlewareHeaders, isMiddlewareRequest, isMiddlewareResponse } from './middleware.ts'
7+
import { RequestData } from './next-request.ts'
68
import {
79
addBasePath,
810
normalizeDataUrl,
911
normalizeLocalePath,
1012
normalizeTrailingSlash,
1113
relativizeURL,
1214
} from './util.ts'
13-
import { addMiddlewareHeaders, isMiddlewareRequest, isMiddlewareResponse } from './middleware.ts'
14-
import { RequestData } from './next-request.ts'
1515

1616
export interface FetchEventResult {
1717
response: Response
@@ -182,8 +182,11 @@ export const buildResponse = async ({
182182
// The rewrite target is a data request, but a middleware rewrite target is always for the page route,
183183
// so we need to tell the server this is a data request. Setting the `x-nextjs-data` header is not enough. 🤷
184184
rewriteUrl.searchParams.set('__nextDataReq', '1')
185-
rewriteUrl.pathname = normalizeTrailingSlash(rewriteUrl.pathname, nextConfig?.trailingSlash)
186185
}
186+
187+
// respect trailing slash rules to prevent 308s
188+
rewriteUrl.pathname = normalizeTrailingSlash(rewriteUrl.pathname, nextConfig?.trailingSlash)
189+
187190
const target = normalizeLocalizedTarget({ target: rewriteUrl.toString(), request, nextConfig })
188191
if (target === request.url) {
189192
logger.withFields({ rewrite_url: rewrite }).debug('Rewrite url is same as original url')

0 commit comments

Comments
 (0)