#9764 fad4f64aa149086feda2d1f3a0b655767034f1a8
Thanks @matthewp! - Adds a new build.format
configuration option: 'preserve'
. This option will preserve your source structure in the final build.
The existing configuration options, file
and directory
, either build all of your HTML pages as files matching the route name (e.g. /about.html
) or build all your files as index.html
within a nested directory structure (e.g. /about/index.html
), respectively. It was not previously possible to control the HTML file built on a per-file basis.
One limitation of build.format: 'file'
is that it cannot create index.html
files for any individual routes (other than the base path of /
) while otherwise building named files. Creating explicit index pages within your file structure still generates a file named for the page route (e.g. src/pages/about/index.astro
builds /about.html
) when using the file
configuration option.
Rather than make a breaking change to allow build.format: 'file'
to be more flexible, we decided to create a new build.format: 'preserve'
.
The new format will preserve how the filesystem is structured and make sure that is mirrored over to production. Using this option:
-
about.astro
becomes about.html
-
about/index.astro
becomes about/index.html
See the build.format
configuration options reference for more details.
#9143 041fdd5c89920f7ccf944b095f29e451f78b0e28
Thanks @ematipico! - Adds experimental support for a new i18n domain routing option ("domains"
) that allows you to configure different domains for individual locales in entirely server-rendered projects.
To enable this in your project, first configure your server
-rendered project's i18n routing with your preferences if you have not already done so. Then, set the experimental.i18nDomains
flag to true
and add i18n.domains
to map any of your supported locales
to custom URLs:
//astro.config.mjs"
import { defineConfig } from 'astro/config';
export default defineConfig({
site: 'https://example.com',
output: 'server', // required, with no prerendered pages
adapter: node({
mode: 'standalone',
}),
i18n: {
defaultLocale: 'en',
locales: ['es', 'en', 'fr', 'ja'],
routing: {
prefixDefaultLocale: false,
},
domains: {
fr: 'https://fr.example.com',
es: 'https://example.es',
},
},
experimental: {
i18nDomains: true,
},
});
With "domains"
configured, the URLs emitted by getAbsoluteLocaleUrl()
and getAbsoluteLocaleUrlList()
will use the options set in i18n.domains
.
import { getAbsoluteLocaleUrl } from 'astro:i18n';
getAbsoluteLocaleUrl('en', 'about'); // will return "https://example.com/about"
getAbsoluteLocaleUrl('fr', 'about'); // will return "https://fr.example.com/about"
getAbsoluteLocaleUrl('es', 'about'); // will return "https://example.es/about"
getAbsoluteLocaleUrl('ja', 'about'); // will return "https://example.com/ja/about"
Similarly, your localized files will create routes at corresponding URLs:
- The file
/en/about.astro
will be reachable at the URL https://example.com/about
.
- The file
/fr/about.astro
will be reachable at the URL https://fr.example.com/about
.
- The file
/es/about.astro
will be reachable at the URL https://example.es/about
.
- The file
/ja/about.astro
will be reachable at the URL https://example.com/ja/about
.
See our Internationalization Guide for more details and limitations on this experimental routing feature.
#9755 d4b886141bb342ac71b1c060e67d66ca2ffbb8bd
Thanks @OliverSpeir! - Fixes an issue where images in Markdown required a relative specifier (e.g. ./
)
Now, you can use the standard 
syntax in Markdown files for images colocated in the same folder: no relative specifier required!
There is no need to update your project; your existing images will still continue to work. However, you may wish to remove any relative specifiers from these Markdown images as they are no longer necessary:
- 
+ 
<!-- This dog lives in the same folder as my article! -->