@@ -3,15 +3,15 @@ import { HTMLRewriter } from '../vendor/deno.land/x/
[email protected] /
3
3
4
4
import { updateModifiedHeaders } from './headers.ts'
5
5
import type { StructuredLogger } from './logging.ts'
6
+ import { addMiddlewareHeaders , isMiddlewareRequest , isMiddlewareResponse } from './middleware.ts'
7
+ import { RequestData } from './next-request.ts'
6
8
import {
7
9
addBasePath ,
8
10
normalizeDataUrl ,
9
11
normalizeLocalePath ,
10
12
normalizeTrailingSlash ,
11
13
relativizeURL ,
12
14
} from './util.ts'
13
- import { addMiddlewareHeaders , isMiddlewareRequest , isMiddlewareResponse } from './middleware.ts'
14
- import { RequestData } from './next-request.ts'
15
15
16
16
export interface FetchEventResult {
17
17
response : Response
@@ -182,8 +182,11 @@ export const buildResponse = async ({
182
182
// The rewrite target is a data request, but a middleware rewrite target is always for the page route,
183
183
// so we need to tell the server this is a data request. Setting the `x-nextjs-data` header is not enough. 🤷
184
184
rewriteUrl . searchParams . set ( '__nextDataReq' , '1' )
185
- rewriteUrl . pathname = normalizeTrailingSlash ( rewriteUrl . pathname , nextConfig ?. trailingSlash )
186
185
}
186
+
187
+ // respect trailing slash rules to prevent 308s
188
+ rewriteUrl . pathname = normalizeTrailingSlash ( rewriteUrl . pathname , nextConfig ?. trailingSlash )
189
+
187
190
const target = normalizeLocalizedTarget ( { target : rewriteUrl . toString ( ) , request, nextConfig } )
188
191
if ( target === request . url ) {
189
192
logger . withFields ( { rewrite_url : rewrite } ) . debug ( 'Rewrite url is same as original url' )
0 commit comments