diff --git a/packages/grafana-data/src/utils/location.test.ts b/packages/grafana-data/src/utils/location.test.ts index 33717820fb1..1b78b1b785f 100644 --- a/packages/grafana-data/src/utils/location.test.ts +++ b/packages/grafana-data/src/utils/location.test.ts @@ -50,6 +50,10 @@ describe('locationUtil', () => { const urlWithoutMaster = locationUtil.stripBaseFromUrl('/thisShouldRemain/subUrl/'); expect(urlWithoutMaster).toBe('/thisShouldRemain/subUrl/'); }); + test('relative url with similar suburl', () => { + const urlWithoutMaster = locationUtil.stripBaseFromUrl('/subUrl-backup/thisShouldRemain/'); + expect(urlWithoutMaster).toBe('/subUrl-backup/thisShouldRemain/'); + }); test('absolute url', () => { const urlWithoutMaster = locationUtil.stripBaseFromUrl('http://www.domain.com:9877/subUrl/thisShouldRemain/'); expect(urlWithoutMaster).toBe('/thisShouldRemain/'); @@ -64,6 +68,12 @@ describe('locationUtil', () => { const urlWithoutMaster = locationUtil.stripBaseFromUrl('http://www.domain.com:9877/thisShouldRemain/subUrl/'); expect(urlWithoutMaster).toBe('http://www.domain.com:9877/thisShouldRemain/subUrl/'); }); + test('absolute url with similar suburl', () => { + const urlWithoutMaster = locationUtil.stripBaseFromUrl( + 'http://www.domain.com:9877/subUrl-backup/thisShouldRemain/' + ); + expect(urlWithoutMaster).toBe('http://www.domain.com:9877/subUrl-backup/thisShouldRemain/'); + }); }); describe('when appSubUrl not configured', () => { diff --git a/packages/grafana-data/src/utils/location.ts b/packages/grafana-data/src/utils/location.ts index d6b851c9ae1..c843cd3f6d8 100644 --- a/packages/grafana-data/src/utils/location.ts +++ b/packages/grafana-data/src/utils/location.ts @@ -43,7 +43,9 @@ const stripBaseFromUrl = (urlOrPath: string): string => { segmentToStrip = `${window.location.origin}${appSubUrl}`; } - return urlOrPath.length > 0 && urlOrPath.indexOf(segmentToStrip) === 0 + // Check if the segment is followed by a '/' so it does not replace incorrect similarly named segments + // i.e. /grafana should not replace /grafanadashboards + return urlOrPath.length > 0 && urlOrPath.indexOf(segmentToStrip + '/') === 0 ? urlOrPath.slice(segmentToStrip.length - stripExtraChars) : urlOrPath; };