Skip to content

Commit 70f19a5

Browse files
feat(sports): add permanent redirects for campaign URLs
refs LIIKUNTA-444
1 parent bab9923 commit 70f19a5

3 files changed

Lines changed: 94 additions & 3 deletions

File tree

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,23 @@
11
const packageJson = require('./package.json');
22
const i18nRoutes = require('./i18nRoutes.config');
33
const { i18n } = require('./next-i18next.config');
4+
const redirectRoutes = require('./redirectRoutes.config');
45
const nextBaseConfig = require('../../next.base.config');
56

67
module.exports = nextBaseConfig({
78
packageJson,
89
i18nRoutes,
910
i18n,
11+
async redirects() {
12+
return Object.entries(redirectRoutes).flatMap(([source, destination]) => [
13+
{
14+
// Not setting `locale: false` here because that didn't work for some reason.
15+
// When locale is left undefined middleware.ts's prefixDefaultLocale function
16+
// lets these redirect routes through without prefixing them with locale.
17+
source: source,
18+
destination: destination,
19+
permanent: true,
20+
},
21+
]);
22+
},
1023
});
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
// Ignore prettier in order to preserve readability of the routes:
2+
// prettier-ignore
3+
const redirectRoutes = {
4+
// Finnish locale versions
5+
'/lapset-ja-perheet': '/fi/pages/kohderyhmat/lapset-ja-perheet',
6+
'/nuoret': '/fi/pages/kohderyhmat/nuoret',
7+
'/aikuiset': '/fi/pages/kohderyhmat/aikuiset',
8+
'/ikaantyneet': '/fi/pages/kohderyhmat/ikaantyneet',
9+
'/soveltavat-ryhmat': '/fi/pages/kohderyhmat/soveltavat-ryhmat',
10+
'/kumppanit': '/fi/pages/kohderyhmat/kumppanit',
11+
'/easysport': '/fi/pages/liikuntapalvelut/easysport',
12+
'/funaction': '/fi/pages/liikuntapalvelut/funaction',
13+
'/nytliikunta': '/fi/pages/liikuntapalvelut/nyt-liikunta',
14+
'/alueliikunta': '/fi/pages/liikuntapalvelut/alueliikunta',
15+
'/ohjattu-liikunta': '/fi/pages/liikuntapalvelut/ohjattu-liikunta',
16+
'/puistojumpat': '/fi/pages/liikuntapalvelut/ohjattu-liikunta/puistojumpat',
17+
'/seniorisapinat': '/fi/pages/liikuntapalvelut/seniorisapinat',
18+
'/erityisuimakortti': '/fi/pages/liikuntapalvelut/erityisuimakortti',
19+
'/kuntotestaus': '/fi/pages/liikuntapalvelut/kuntotestaus',
20+
'/kuntosaliohjelmat': '/fi/pages/liikuntapalvelut/kuntosaliohjelmien-laadinta-ja-opastus',
21+
'/liikuntaneuvonta': '/fi/pages/liikuntapalvelut/liikuntaneuvonta',
22+
'/liikuntaluuri': '/fi/pages/liikuntapalvelut/liikuntaluuri',
23+
'/liikuntahulinat': '/fi/pages/liikuntapalvelut/liikuntahulinat',
24+
'/perhehulinat': '/fi/pages/liikuntapalvelut/perhehulinat-omatoiminen',
25+
'/liikuntatilavaraukset': '/fi/pages/kohderyhmat/kumppanit/liikuntatilojen-varaaminen',
26+
'/maksut': '/fi/pages/liikuntapalvelut/maksut-ja-hinnasto',
27+
// Swedish locale versions
28+
'/barn-och-familjer': '/sv/sidor/malgrupper/barn-och-familjer',
29+
'/unga': '/sv/pages/malgrupper/unga',
30+
'/vuxna': '/sv/pages/malgrupper/vuxna',
31+
'/aldre': '/sv/pages/malgrupper/aldre',
32+
'/tillampade-grupper': '/sv/pages/malgrupper/tillampande-grupper',
33+
'/partners': '/sv/pages/malgrupper/partners/sv',
34+
'/easysport/sv': '/sv/pages/stod-for-motion/easysport',
35+
'/funaction/sv': '/sv/pages/stod-for-motion/funaction',
36+
'/nyt-motion': '/sv/pages/stod-for-motion/nyt-motion',
37+
'/forortsmotion': '/sv/pages/stod-for-motion/forortsmotion',
38+
'/handledd-motion': '/sv/pages/stod-for-motion/handledd-motion',
39+
'/parkgymnastiken': '/sv/sidor/stod-for-motion/handledd-motion/parkgymnastiken',
40+
'/seniorisapinat/sv': '/sv/pages/stod-for-motion/seniorisapinat',
41+
'/specialsimkort': '/sv/pages/stod-for-motion/specialsimkort',
42+
'/konditionstest': '/sv/pages/stod-for-motion/konditionstest',
43+
'/gymprogram': '/sv/pages/stod-for-motion/handledning-och-utarbetande-av-ett-gymprogram',
44+
'/motionsradgivning': '/sv/pages/stod-for-motion/motionsradgivning',
45+
'/motionsluren': '/sv/pages/stod-for-motion/liikuntaluuri-motionsluren',
46+
'/idrottslek': '/sv/pages/stod-for-motion/liikuntahulinat-idrottslek',
47+
'/idrottslek-for-familjer': '/sv/pages/stod-for-motion/perhehulinat-idrottslek-for-familjer-pa-egen-hand',
48+
'/bokning-av-idrottsutrymmen': '/sv/sidor/malgrupper/partners/bokning-av-idrottsutrymmen',
49+
'/priser': '/sv/sidor/stod-for-motion/priser',
50+
// English locale versions
51+
'/children-and-families': '/en/pages/target-groups/children-and-families',
52+
'/youth': '/en/pages/target-groups/youth',
53+
'/adults': '/en/pages/target-groups/adults',
54+
'/seniors': '/en/pages/target-groups/seniors',
55+
'/adapted-groups': '/en/pages/target-groups/adapted-groups',
56+
'/partners/en': '/en/pages/target-groups/partners',
57+
'/easysport/en': '/en/pages/support-for-physical-activity/easysport',
58+
'/funaction/en': '/en/pages/support-for-physical-activity/funaction',
59+
'/nyt-liikunta/en': '/en/pages/support-for-physical-activity/nyt-liikunta',
60+
'/regional-exercise-services': '/en/pages/support-for-physical-activity/regional-exercise-services',
61+
'/guided-exercise': '/en/pages/support-for-physical-activity/guided-exercise',
62+
'/park-exercise-sessions': '/en/pages/support-for-physical-activity/guided-exercise/park-exercise-sessions',
63+
'/seniorisapinat/en': '/en/pages/support-for-physical-activity/seniorisapinat',
64+
'/special-swimming-card': '/en/pages/support-for-physical-activity/special-swimming-card',
65+
'/fitness-testing': '/en/pages/support-for-physical-activity/fitness-testing',
66+
'/fitness-programmes': '/en/pages/support-for-physical-activity/personal-fitness-programmes-and-guidance-at-gyms',
67+
'/physical-activity-counselling': '/en/pages/support-for-physical-activity/physical-activity-counselling',
68+
'/liikuntaluuri-telephone-service': '/en/pages/support-for-physical-activity/liikuntaluuri-telephone-service',
69+
'/sports-sessions': '/en/pages/support-for-physical-activity/liikuntahulinat-sports-sessions',
70+
'/family-sports-sessions': '/en/pages/support-for-physical-activity/perhehulinat-family-sports-sessions-self-guided',
71+
'/reservation-of-sports-facilities': '/en/pages/target-groups/partners/reservation-of-sports-facilities',
72+
'/pricing': '/en/pages/support-for-physical-activity/pricing',
73+
};
74+
75+
module.exports = redirectRoutes;

apps/sports-helsinki/src/middleware.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import stringifyUrlObject from '@events-helsinki/components/utils/stringifyUrlObject';
33
import type { NextRequest } from 'next/server';
44
import { NextResponse } from 'next/server';
5+
import redirectRoutes from '../redirectRoutes.config';
56

67
// TODO: For some reason middleware cannot read `'@events-helsinki/components` package without breaking the build
78
const DEFAULT_LANGUAGE = 'fi';
@@ -22,12 +23,14 @@ const requestType = {
2223
const prefixDefaultLocale = async (req: NextRequest) => {
2324
// stringify and map dynamic paths to segmented, ie: /venues/:id => /venues/[id]
2425
const path = stringifyUrlObject(req.nextUrl);
25-
if (req.nextUrl.locale === 'default') {
26+
if (Object.keys(redirectRoutes).includes(path)) {
27+
// Let redirect routes through without prefixing them with locale
28+
return NextResponse.redirect(new URL(path, req.url));
29+
} else if (req.nextUrl.locale === 'default') {
2630
return NextResponse.redirect(
2731
new URL(`/${DEFAULT_LANGUAGE}${path}`, req.url)
2832
);
29-
}
30-
if (!path.includes(req.nextUrl.pathname)) {
33+
} else if (!path.includes(req.nextUrl.pathname)) {
3134
return NextResponse.redirect(
3235
new URL(`/${req.nextUrl.locale}${path}`, req.url)
3336
);

0 commit comments

Comments
 (0)