mirror of
https://github.com/withastro/astro.git
synced 2024-12-16 21:46:22 -05:00
@astrojs/sitemap: Fixes generated URLs when using a base
with a SSR adapter (#9704)
* Fix base path formatting for ssr adapters * Update .changeset/curly-seals-count.md Co-authored-by: Florian Lefebvre <contact@florian-lefebvre.dev> --------- Co-authored-by: Florian Lefebvre <contact@florian-lefebvre.dev>
This commit is contained in:
parent
96bfc4be76
commit
b325fada56
3 changed files with 50 additions and 5 deletions
5
.changeset/curly-seals-count.md
Normal file
5
.changeset/curly-seals-count.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
"@astrojs/sitemap": patch
|
||||
---
|
||||
|
||||
Fixes generated URLs when using a `base` with a SSR adapter
|
|
@ -107,11 +107,12 @@ const createPlugin = (options?: SitemapOptions): AstroIntegration => {
|
|||
*/
|
||||
if (r.pathname) {
|
||||
if (isStatusCodePage(r.pathname ?? r.route)) return urls;
|
||||
/**
|
||||
* remove the initial slash from relative pathname
|
||||
* because `finalSiteUrl` always has trailing slash
|
||||
*/
|
||||
const fullPath = finalSiteUrl.pathname + r.generate(r.pathname).substring(1);
|
||||
|
||||
// `finalSiteUrl` may end with a trailing slash
|
||||
// or not because of base paths.
|
||||
let fullPath = finalSiteUrl.pathname;
|
||||
if (fullPath.endsWith('/')) fullPath += r.generate(r.pathname).substring(1);
|
||||
else fullPath += r.generate(r.pathname);
|
||||
|
||||
let newUrl = new URL(fullPath, finalSiteUrl).href;
|
||||
|
||||
|
|
39
packages/integrations/sitemap/test/base-path.test.js
Normal file
39
packages/integrations/sitemap/test/base-path.test.js
Normal file
|
@ -0,0 +1,39 @@
|
|||
import { loadFixture, readXML } from './test-utils.js';
|
||||
import { expect } from 'chai';
|
||||
|
||||
describe('URLs with base path', () => {
|
||||
/** @type {import('./test-utils').Fixture} */
|
||||
let fixture;
|
||||
|
||||
describe('using node adapter', () => {
|
||||
before(async () => {
|
||||
fixture = await loadFixture({
|
||||
root: './fixtures/ssr/',
|
||||
base: '/base',
|
||||
});
|
||||
await fixture.build();
|
||||
});
|
||||
|
||||
it('Base path is concatenated correctly', async () => {
|
||||
const data = await readXML(fixture.readFile('/client/sitemap-0.xml'));
|
||||
const urls = data.urlset.url;
|
||||
expect(urls[0].loc[0]).to.equal('http://example.com/base/one/');
|
||||
});
|
||||
});
|
||||
|
||||
describe('static', () => {
|
||||
before(async () => {
|
||||
fixture = await loadFixture({
|
||||
root: './fixtures/static/',
|
||||
base: '/base',
|
||||
});
|
||||
await fixture.build();
|
||||
});
|
||||
|
||||
it('Base path is concatenated correctly', async () => {
|
||||
const data = await readXML(fixture.readFile('/sitemap-0.xml'));
|
||||
const urls = data.urlset.url;
|
||||
expect(urls[0].loc[0]).to.equal('http://example.com/base/123/');
|
||||
});
|
||||
});
|
||||
});
|
Loading…
Reference in a new issue