Skip to content

Commit be6bf8b

Browse files
sc-ruslanmatkovskyiRuslan Matkovskyi
and
Ruslan Matkovskyi
authored
#603676: [sitecore-jss-nextjs] fixed redirect middleware logic (#1676)
* #603676: [sitecore-jss-nextjs] fixed redirect middleware logic for match target url when uses param of trailing slash is true in next.config * #603676: changed CHANGELOG * #603676: added unit test --------- Co-authored-by: Ruslan Matkovskyi <[email protected]>
1 parent 54c5c61 commit be6bf8b

File tree

3 files changed

+62
-2
lines changed

3 files changed

+62
-2
lines changed

CHANGELOG.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ Our versioning strategy is as follows:
1717

1818
### 🐛 Bug Fixes
1919

20-
* `[templates/node-headless-ssr-proxy]` [node-headless-ssr-proxy] Add sc_site qs parameter to Layout Service requests by default ([#1660](https://github.com/Sitecore/jss/pull/1660))
20+
* `[templates/node-headless-ssr-proxy]` `[node-headless-ssr-proxy]` Add sc_site qs parameter to Layout Service requests by default ([#1660](https://github.com/Sitecore/jss/pull/1660))
21+
* `[sitecore-jss-nextjs]` Fix redirect middleware to match pattern when uses param trailingSlash in next.config.js ([#1676](https://github.com/Sitecore/jss/pull/1676))
2122

2223
## 21.6.0
2324

packages/sitecore-jss-nextjs/src/middleware/redirects-middleware.test.ts

+59
Original file line numberDiff line numberDiff line change
@@ -1188,6 +1188,65 @@ describe('RedirectsMiddleware', () => {
11881188

11891189
nextRedirectStub.restore();
11901190
});
1191+
1192+
it('should redirect, when next.config uses params trailingSlash is true', async () => {
1193+
const setCookies = () => {};
1194+
const res = createResponse({
1195+
url: 'http://localhost:3000/found/',
1196+
status: 301,
1197+
setCookies,
1198+
});
1199+
const nextRedirectStub = sinon.stub(NextResponse, 'redirect').callsFake((url, init) => {
1200+
const status = typeof init === 'number' ? init : init?.status || 307;
1201+
return ({
1202+
url,
1203+
status,
1204+
cookies: { set: setCookies },
1205+
headers: res.headers,
1206+
} as unknown) as NextResponse;
1207+
});
1208+
const req = createRequest({
1209+
nextUrl: {
1210+
pathname: '/not-found/',
1211+
href: 'http://localhost:3000/not-found/',
1212+
locale: 'en',
1213+
clone() {
1214+
return Object.assign({}, req.nextUrl);
1215+
},
1216+
},
1217+
});
1218+
1219+
const { middleware, fetchRedirects, siteResolver } = createMiddleware({
1220+
pattern: '/not-found/',
1221+
target: 'http://localhost:3000/found/',
1222+
redirectType: REDIRECT_TYPE_301,
1223+
isQueryStringPreserved: true,
1224+
locale: 'en',
1225+
});
1226+
1227+
const finalRes = await middleware.getHandler()(req);
1228+
1229+
validateDebugLog('redirects middleware start: %o', {
1230+
hostname: 'foo.net',
1231+
language: 'en',
1232+
pathname: '/not-found/',
1233+
});
1234+
1235+
validateEndMessageDebugLog('redirects middleware end in %dms: %o', {
1236+
headers: {},
1237+
redirected: undefined,
1238+
status: 301,
1239+
url: 'http://localhost:3000/found/',
1240+
});
1241+
1242+
expect(siteResolver.getByHost).to.be.calledWith(hostname);
1243+
// eslint-disable-next-line no-unused-expressions
1244+
expect(fetchRedirects.called).to.be.true;
1245+
expect(finalRes).to.deep.equal(res);
1246+
expect(finalRes.status).to.equal(res.status);
1247+
1248+
nextRedirectStub.restore();
1249+
});
11911250
});
11921251
});
11931252
});

packages/sitecore-jss-nextjs/src/middleware/redirects-middleware.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ export class RedirectsMiddleware extends MiddlewareBase {
180180
.replace(/^\/|\/$/g, '')
181181
.replace(/^\^\/|\/\$$/g, '')
182182
.replace(/^\^|\$$/g, '')
183-
.replace(/\$\/gi$/g, '')}$/gi`;
183+
.replace(/\$\/gi$/g, '')}[\/]?$/gi`;
184184

185185
return (
186186
(regexParser(redirect.pattern).test(tragetURL) ||

0 commit comments

Comments
 (0)