mirror of
https://github.com/withastro/astro.git
synced 2024-12-16 21:46:22 -05:00
fix(vercel): trailingSlash
fix for non-html pages (#3185)
* fix(vercel): `trailingSlash` fix for non-html pages * Changeset
This commit is contained in:
parent
22cb4b7b32
commit
eaad17694f
2 changed files with 42 additions and 29 deletions
5
.changeset/swift-houses-itch.md
Normal file
5
.changeset/swift-houses-itch.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
'@astrojs/vercel': patch
|
||||
---
|
||||
|
||||
Fixed `trailingSlash` for non-HTML pages
|
|
@ -88,39 +88,47 @@ export default function vercel(): AstroIntegration {
|
|||
basePath: '/',
|
||||
pages404: false,
|
||||
redirects:
|
||||
// Extracted from Next.js v12.1.5
|
||||
_config.trailingSlash === 'always'
|
||||
? [
|
||||
{
|
||||
source: '/:file((?!\\.well-known(?:/.*)?)(?:[^/]+/)*[^/]+\\.\\w+)/',
|
||||
destination: '/:file',
|
||||
internal: true,
|
||||
statusCode: 308,
|
||||
regex: '^(?:/((?!\\.well-known(?:/.*)?)(?:[^/]+/)*[^/]+\\.\\w+))/$',
|
||||
},
|
||||
{
|
||||
source: '/:notfile((?!\\.well-known(?:/.*)?)(?:[^/]+/)*[^/\\.]+)',
|
||||
destination: '/:notfile/',
|
||||
internal: true,
|
||||
statusCode: 308,
|
||||
regex: '^(?:/((?!\\.well-known(?:/.*)?)(?:[^/]+/)*[^/\\.]+))$',
|
||||
},
|
||||
]
|
||||
: _config.trailingSlash === 'never'
|
||||
? [
|
||||
{
|
||||
source: '/:path+/',
|
||||
destination: '/:path+',
|
||||
internal: true,
|
||||
statusCode: 308,
|
||||
regex: '^(?:/((?:[^/]+?)(?:/(?:[^/]+?))*))/$',
|
||||
},
|
||||
]
|
||||
_config.trailingSlash !== 'ignore'
|
||||
? routes
|
||||
.filter((route) => route.type === 'page' && !route.pathname?.endsWith('/'))
|
||||
.map((route) => {
|
||||
const path =
|
||||
'/' +
|
||||
route.segments
|
||||
.map((segments) =>
|
||||
segments
|
||||
.map((part) =>
|
||||
part.spread
|
||||
? `:${part.content}*`
|
||||
: part.dynamic
|
||||
? `:${part.content}`
|
||||
: part.content
|
||||
)
|
||||
.join('')
|
||||
)
|
||||
.join('/');
|
||||
|
||||
let source, destination;
|
||||
|
||||
if (_config.trailingSlash === 'always') {
|
||||
source = path;
|
||||
destination = path + '/';
|
||||
} else {
|
||||
source = path + '/';
|
||||
destination = path;
|
||||
}
|
||||
|
||||
return { source, destination, statusCode: 308 };
|
||||
})
|
||||
: undefined,
|
||||
rewrites: staticRoutes.map((route) => {
|
||||
let source = route.pathname as string;
|
||||
|
||||
if (_config.trailingSlash === 'always' && !source.endsWith('/')) {
|
||||
if (
|
||||
route.type === 'page' &&
|
||||
_config.trailingSlash === 'always' &&
|
||||
!source.endsWith('/')
|
||||
) {
|
||||
source += '/';
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue