Skip to content

Routing

Verstehe, wie PreactPress Dateien auf URLs abbildet

Routing#

PreactPress nutzt dateibasiertes Routing. Jede .md- und .mdx-Datei unter srcDir wird zu einer Route, und Produktionsbuilds schreiben jede Route als statisches HTML.

Dateibasiertes Routing#

Bei dieser Struktur:

.
├── index.md
├── about.md
├── guide/
│   ├── index.md
│   └── getting-started.md
└── interactive.mdx

erzeugt PreactPress diese Routen:

index.md                  -> /
about.md                  -> /about
guide/index.md            -> /guide
guide/getting-started.md  -> /guide/getting-started
interactive.mdx           -> /interactive

Beim Produktionsbuild werden Routen als Verzeichnis-Indizes geschrieben:

/                      -> dist/index.html
/about                 -> dist/about/index.html
/guide/getting-started -> dist/guide/getting-started/index.html

Standardmäßig (cleanUrls: true) schreibt der Build Verzeichnis-Indizes, damit Hosts URLs ohne Dateiendung ausliefern können.

Projektroot und Quellverzeichnis#

Der Projektroot ist der Ort, an dem PreactPress .preactpress/config.ts sucht.

Standardmäßig liegen die Quelldateien ebenfalls im Projektroot:

.
├── .preactpress/
│   └── config.ts
├── index.md
└── guide/
    └── getting-started.md

Mit srcDir kannst du Inhalte in ein verschachteltes Quellverzeichnis legen:

export default {
  srcDir: "docs",
};

Dann sieht die Struktur so aus:

.
├── .preactpress/
│   └── config.ts
└── docs/
    ├── index.md
    └── guide/
        └── getting-started.md

Die resultierenden Routen bleiben gleich:

docs/index.md                  -> /
docs/guide/getting-started.md  -> /guide/getting-started

Zwischen Seiten verlinken#

Du kannst absolute oder relative Links verwenden. Empfohlen ist, Dateiendungen wegzulassen:

[Getting Started](/de/guide/getting-started)
[Routing](./routing)
[Start](../)

Vermeide direkte Links auf generiertes HTML oder Markdown-Quelldateien:

<!-- Vermeiden -->

[Getting Started](/de/guide/getting-started.md)
[Getting Started](/de/guide/getting-started.html)

preactpress check validiert lokale Markdown-Links mit .md-, .mdx- oder .html-Endung und meldet fehlende Seiten.

Locale-Routen#

PreactPress unterstützt Locale-Ordner im VitePress-Stil. Die Standardsprache liegt im Root, Übersetzungen liegen in Locale-Ordnern:

index.md                       -> /
guide/getting-started.md       -> /guide/getting-started
de/index.md                    -> /de
de/guide/getting-started.md    -> /de/guide/getting-started

Labels, Sprachcodes und lokale Navigation konfigurierst du in .preactpress/config.ts:

export default {
  locales: {
    root: {
      label: "English",
      lang: "en",
    },
    de: {
      label: "Deutsch",
      lang: "de",
      link: "/de/",
    },
  },
};

Das Standard-Theme zeigt einen Sprachumschalter, wenn mehrere Locales konfiguriert sind.

Tag-Routen#

Seiten können Tags im Frontmatter definieren:

---
title: Release Notes
tags: [release, changelog]
---

Jeder Tag erhält eine Index-Seite:

release   -> /tags/release
changelog -> /tags/changelog

Bei lokalisierten Inhalten werden Tag-Seiten pro Locale erzeugt:

de/guide/intro.md mit Tag "Markdown" -> /de/tags/markdown

Wenn eine echte Markdown- oder MDX-Seite dieselbe Route wie ein generierter Tag-Index belegt, gewinnt die echte Seite.

Base Path#

Nutze site.base, wenn die Site unter einem Unterpfad ausgeliefert wird, zum Beispiel bei GitHub-Pages-Projektseiten:

export default {
  site: {
    base: "/my-repo/",
  },
};

Du kannst den Base Path auch für einen einzelnen Build überschreiben:

pnpm exec preactpress build --base /my-repo/

Route Rewrites#

Öffentliche URLs auf bestehende Inhalte mappen, ohne Dateien zu duplizieren:

export default {
  rewrites: {
    "/docs": "/guide",
    "/getting-started": "/guide/intro",
  },
};

Keys sind die Routen für Besucher; Values müssen auf Routen zeigen, die bereits aus Markdown-Dateien existieren. preactpress check validiert Quellen und Kollisionen.

Clean URLs und Hosting#

cleanUrls Ausgabe für /about Typischer Host
true (Standard) dist/about/index.html Netlify, Vercel, Cloudflare Pages, GitHub Pages
false dist/about.html Statische Buckets ohne Directory-Index
export default {
  cleanUrls: false,
};

Die meisten modernen Static Hosts funktionieren mit dem Standard. Setze cleanUrls: false nur, wenn dein Host /about nicht zu about/index.html auflösen kann.

Aktuelle Grenzen#

PreactPress hält Routing bewusst klein. Im Vergleich zu VitePress enthält es aktuell nicht:

Feature Status
Dynamische Routen wie [pkg].paths.ts Nicht unterstützt
Pattern-basierte Rewrites mit Parametern Nicht unterstützt

Wenn deine Site viele Seiten aus externen Daten erzeugen muss, generiere Markdown- oder MDX-Dateien vor preactpress build.

Updated 2. Nov. 2026