11const path = require ( 'path' )
22const slash = require ( 'slash' )
3- const { firstVersionDeprecatedOnNewSite, lastVersionWithoutStubbedRedirectFiles } = require ( '../lib/enterprise-server-releases' )
3+ const { firstVersionDeprecatedOnNewSite, lastVersionWithoutArchivedRedirectsFile } = require ( '../lib/enterprise-server-releases' )
44const patterns = require ( '../lib/patterns' )
55const versionSatisfiesRange = require ( '../lib/version-satisfies-range' )
66const isArchivedVersion = require ( '../lib/is-archived-version' )
@@ -25,21 +25,37 @@ module.exports = async (req, res, next) => {
2525 }
2626
2727 // find redirects for versions between 2.13 and 2.17
28- // starting with 2.18, we updated the archival script to create stubbed HTML redirect files
28+ // starting with 2.18, we updated the archival script to create a redirects.json file
2929 if ( versionSatisfiesRange ( requestedVersion , `>=${ firstVersionDeprecatedOnNewSite } ` ) &&
30- versionSatisfiesRange ( requestedVersion , `<=${ lastVersionWithoutStubbedRedirectFiles } ` ) ) {
30+ versionSatisfiesRange ( requestedVersion , `<=${ lastVersionWithoutArchivedRedirectsFile } ` ) ) {
3131 const redirect = archvivedRedirects [ req . path ]
3232 if ( redirect && redirect !== req . path ) {
3333 return res . redirect ( 301 , redirect )
3434 }
3535 }
3636
37+ let reqPath = req . path
38+ let isRedirect = false
39+ if ( versionSatisfiesRange ( requestedVersion , `>${ lastVersionWithoutArchivedRedirectsFile } ` ) ) {
40+ const redirectJson = await got ( getProxyPath ( 'redirects.json' , requestedVersion ) )
41+ if ( redirectJson [ req . path ] ) {
42+ isRedirect = true
43+ }
44+ reqPath = redirectJson [ req . path ] || req . path
45+ }
46+
3747 try {
38- const r = await got ( getProxyPath ( req . path , requestedVersion ) )
48+ const r = await got ( getProxyPath ( reqPath , requestedVersion ) )
3949 res . set ( 'content-type' , r . headers [ 'content-type' ] )
4050 res . set ( 'x-robots-tag' , 'noindex' )
4151
42- // make the stubbed redirect files added in >=2.18 return 301 instead of 200
52+ // make redirects found via redirects.json return 301 instead of 200
53+ if ( isRedirect ) {
54+ res . status ( 301 )
55+ res . set ( 'location' , reqPath )
56+ }
57+
58+ // make stubbed redirect files (which exist in versions <2.13) return 301 instead of 200
4359 const staticRedirect = r . body . match ( patterns . staticRedirect )
4460 if ( staticRedirect ) {
4561 res . status ( 301 )
@@ -73,7 +89,7 @@ function getProxyPath (reqPath, requestedVersion) {
7389// this workaround finds potentially relevant frontmatter redirects in currently supported pages
7490function getFallbackRedirects ( req , requestedVersion ) {
7591 if ( versionSatisfiesRange ( requestedVersion , `<${ firstVersionDeprecatedOnNewSite } ` ) ) return
76- if ( versionSatisfiesRange ( requestedVersion , `>${ lastVersionWithoutStubbedRedirectFiles } ` ) ) return
92+ if ( versionSatisfiesRange ( requestedVersion , `>${ lastVersionWithoutArchivedRedirectsFile } ` ) ) return
7793
7894 return archivedFrontmatterFallbacks . find ( arrayOfFallbacks => arrayOfFallbacks . includes ( req . path ) )
7995}
0 commit comments