Skip to content
Compare
Choose a tag to compare
@astrobot-houston astrobot-houston released this 30 Jan 11:23
· 12 commits to main since this release
f6b7839

Minor Changes

  • #12994 5361755 Thanks @ascorbic! - Redirects trailing slashes for on-demand pages

    When the trailingSlash option is set to always or never, on-demand rendered pages will now redirect to the correct URL when the trailing slash doesn't match the configuration option. This was previously the case for static pages, but now works for on-demand pages as well.

    Now, it doesn't matter whether your visitor navigates to /about/, /about, or even /about///. In production, they'll always end up on the correct page. For GET requests, the redirect will be a 301 (permanent) redirect, and for all other request methods, it will be a 308 (permanent, and preserve the request method) redirect.

    In development, you'll see a helpful 404 page to alert you of a trailing slash mismatch so you can troubleshoot routes.

  • #12979 e621712 Thanks @ematipico! - Adds support for redirecting to external sites with the redirects configuration option.

    Now, you can redirect routes either internally to another path or externally by providing a URL beginning with http or https:

    // astro.config.mjs
    import { defineConfig } from 'astro/config';
    
    export default defineConfig({
      redirects: {
        '/blog': 'https://example.com/blog',
        '/news': {
          status: 302,
          destination: 'https://example.com/news',
        },
      },
    });
  • #13084 0f3be31 Thanks @ematipico! - Adds a new experimental virtual module astro:config that exposes a type-safe subset of your astro.config.mjs configuration

    The virtual module exposes two sub-paths for controlled access to your configuration:

    • astro:config/client: exposes config information that is safe to expose to the client.
    • astro:config/server: exposes additional information that is safe to expose to the server, such as file/dir paths.

    To enable this new virtual module, add the experimental.serializeManifest feature flag to your Astro config:

    // astro.config.mjs
    import { defineConfig } from 'astro/config';
    export default defineConfig({
      experimental: {
        serializeManifest: true,
      },
    });

    Then, you can access the module in any file inside your project to import and use values from your Astro config:

    // src/utils.js
    import { trailingSlash } from 'astro:config/client';
    
    function addForwardSlash(path) {
      if (trailingSlash === 'always') {
        return path.endsWith('/') ? path : path + '/';
      } else {
        return path;
      }
    }

    For a complete overview, and to give feedback on this experimental API, see the Serialized Manifest RFC.

Patch Changes