StartseiteSandboxShowcaseAppDokumentBlog
    • EnglishEnglisch
      EN
    • русскийRussisch
      RU
    • 日本語Japanisch
      JA
    • françaisFranzösisch
      FR
    • 한국어Koreanisch
      KO
    • 中文Chinesisch
      ZH
    • españolSpanisch
      ES
    • DeutschDeutsch
      DE
    • العربيةArabisch
      AR
    • italianoItalienisch
      IT
    • British EnglishEnglisch (Vereinigtes Königreich)
      EN-GB
    • portuguêsPortugiesisch
      PT
    • हिन्दीHindi
      HI
    • TürkçeTürkisch
      TR
    • polskiPolnisch
      PL
    • IndonesiaIndonesisch
      ID
    • Tiếng ViệtVietnamesisch
      VI
    • українськаUkrainisch
      UK
    /
    Dokumentation nach Framework filtern
    Alt+←
    Warum Intlayer?
    Anfangen
    Konzept
    • Wie Intlayer funktioniert
    • Konfiguration
    • TestFillBuildWatchExtractLoginPushPullConfigurationListVersionEditorLiveDebugDoc ReviewDoc TranslateSDK
    • Visueller Editor
    • CMS
    • CI/CD-Integration
    • ÜbersetzungPluralAufzählungBedingungGeschlechtEinfügungDateiVerschachtelungMarkdownHTMLFunktionsabruf
    • Datei pro Locale
    • Compiler
    • Automatisches Ausfüllen
    • Testen
    • Bundle-Optimierung
    Umwelt
    • Next.js 14 und App Router
      Next.js 15
      Next.js ohne Locale URL
      Next.js und Page Router
      Compiler
    • Tanstack Start Solid
    • Astro und React
      Astro und Svelte
      Astro und Vue
      Astro und Solid
      Astro und Preact
      Astro und Lit
      Astro und Vanilla JS
    • React Router v7
      React Router v7 (fs-routes)
      Compiler
    • Nuxt und Vue
    • Vite und Solid
    • SvelteKit
    • Vite und Preact
    • Vite und Vanilla JS
    • Vite und Lit
    • Angular 19 (Webpack)
      Analog
    • React CRA
    • React Native und Expo
    • Express.js
      NestJS
      Fastify
      Hono
      Adonis
    • Lynx und React
    Plugins
    • JSON
    • gettext (.po)
    VS Code-Erweiterung
    Agent
    • MCP-Server
    • Agenten-Fähigkeiten
    Versionen
    • v8
    • v7
    • v6
    Benchmark
    • Next.js
    • TanStack
    • Vue
    • Solid
    • Svelte
    Blog
    Frage stellen
    1. Documentation
    2. Konzept
    3. Custom_url_rewrites
    \n\n ```\n\n \n \n \n ```tsx\n import { useRewriteURL } from \"solid-intlayer\";\n\n const Layout = (props) => {\n useRewriteURL();\n return <>{props.children};\n };\n ```\n\n \n \n \n ```svelte\n \n\n ```\n\n \n\n\n## Router-Integration & Proxys\n\nDie serverseitigen Proxies von Intlayer (Vite & Next.js) behandeln benutzerdefinierte Umschreibungen automatisch, um die SEO-Konsistenz sicherzustellen.\n\n1. **Interne Umschreibungen**: Wenn ein Benutzer `/fr/a-propos` besucht, leitet der Proxy ihn intern auf `/fr/about` um, sodass Ihr Framework die korrekte Route findet.\n2. **Verbindliche Weiterleitungen**: Wenn ein Benutzer manuell `/fr/about` eingibt, sendet der Proxy eine 301/302-Weiterleitung zu `/fr/a-propos`, sodass Suchmaschinen nur eine Version der Seite indexieren.\n\n### Next.js-Integration\n\nDie Next.js-Integration wird vollständig über die `intlayerProxy`-Middleware gehandhabt.\n\n```typescript fileName=\"middleware.ts\"\nimport { intlayerProxy } from \"next-intlayer/middleware\";\nimport { NextRequest } from \"next/server\";\n\nexport function middleware(request: NextRequest) {\n return intlayerProxy(request);\n}\n```\n\n### Vite-Integration\n\nFür SolidJS, Vue und Svelte verwaltet das `intlayerProxy`-Vite-Plugin die Rewrites während der Entwicklung.\n\n```typescript fileName=\"vite.config.ts\"\nimport { defineConfig } from \"vite\";\nimport { intlayerProxy } from \"vite-intlayer\";\n\nexport default defineConfig({\n plugins: [intlayerProxy()],\n});\n```\n\n## Hauptmerkmale\n\n### 1. Rewrites für mehrere Kontexte\n\nJeder Formatter erzeugt ein `RewriteObject`, das spezialisierte Regeln für verschiedene Konsumenten enthält:\n\n- `url`: Optimiert für clientseitige URL-Erzeugung (entfernt Locale-Segmente).\n- `nextjs`: Bewahrt `[locale]` für Next.js-Middleware.\n- `vite`: Bewahrt `:locale` für Vite-Proxies.\n\n### 2. Automatische Pattern-Normalisierung\n\nIntlayer normalisiert intern alle Muster-Syntaxen (z. B. die Umwandlung von `[param]` in `:param`), sodass das Matching unabhängig vom Quellframework konsistent bleibt.\n\n### 3. SEO: Kanonische URLs\n\nDurch das Erzwingen von Weiterleitungen von kanonischen Pfaden zu sprechenden Aliasen verhindert Intlayer Probleme mit doppelten Inhalten und verbessert die Auffindbarkeit der Seite.\n\n## Kernwerkzeuge\n\n- `getLocalizedUrl(url, locale)`: Generiert eine lokalisierte URL unter Berücksichtigung der Rewrite-Regeln.\n- `getCanonicalPath(path, locale)`: Wandelt eine lokalisierte URL zurück in ihren internen kanonischen Pfad.\n- `getRewritePath(pathname, locale)`: Erkennt, ob ein Pfadname auf seinen schöneren lokalisierten Alias korrigiert werden muss.\n","about":"Erfahren Sie, wie Sie in Intlayer benutzerdefinierte URL Rewrites konfigurieren und verwenden, um locale-spezifische Pfade zu definieren.","url":"https://intlayer.org/de/doc/concept/custom_url_rewrites","datePublished":"13-08-2024","dateModified":"26-01-2026","keywords":"Benutzerdefinierte URL Rewrites, Routing, Internationalisierung, i18n","license":"https://raw.githubusercontent.com/aymericzip/intlayer/refs/heads/main/LICENSE","audience":{"@type":"Audience","audienceType":"Entwickler, Inhaltsmanager"}}
    Erstellung:2024-08-13Letzte Aktualisierung:2026-01-26
    Referenzieren Sie diese Dokumentation mit Ihrem bevorzugten AI-Assistenten
    ChatGPT
    Claude
    DeepSeek
    Google AI mode
    Gemini
    Perplexity
    Mistral
    Grok

    Stellen Sie Ihre Frage und erhalten Sie einen Resümee des Dokuments, indem Sie diese Seite und den AI-Anbieter Ihrer Wahl referenzieren

    Versionshistorie

    1. "Zentrale URL-Rewrites mit framework-spezifischen Formatierern und dem useRewriteURL-Hook implementieren."
      v8.0.025.1.2026

    Der Inhalt dieser Seite wurde mit einer KI übersetzt.

    Den englischen Originaltext ansehen
    Diese Dokumentation bearbeiten

    Wenn Sie eine Idee haben, um diese Dokumentation zu verbessern, zögern Sie bitte nicht, durch das Einreichen eines Pull-Requests auf GitHub beizutragen.

    GitHub-Link zur Dokumentation
    Kopieren

    Markdown des Dokuments in die Zwischenablage kopieren

    Implementierung benutzerdefinierter URL Rewrites

    Intlayer unterstützt benutzerdefinierte URL Rewrites, mit denen Sie locale-spezifische Pfade definieren können, die von der Standardstruktur /locale/path abweichen. Dadurch sind URLs wie /about für Englisch und /a-propos für Französisch möglich, während die interne Anwendungslogik kanonisch bleibt.

    Konfiguration

    Benutzerdefinierte Rewrites werden im Abschnitt routing Ihrer Datei intlayer.config.ts konfiguriert und verwenden frameworkspezifische Formatter. Diese Formatter liefern die korrekte Syntax für den von Ihnen bevorzugten Router.

    intlayer.config.ts
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    import { Locales, type IntlayerConfig } from "intlayer";import { nextjsRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-no-default",    rewrite: nextjsRewrite({      "/[locale]/about": {        fr: "/[locale]/a-propos",        es: "/[locale]/acerca-de",      },      "/[locale]/products/[id]": {        fr: "/[locale]/produits/[id]",        es: "/[locale]/productos/[id]",      },    }),  },};export default config;
    intlayer.config.ts
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    import { Locales, type IntlayerConfig } from "intlayer";import { reactRouterRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-all",    rewrite: reactRouterRewrite({      "/:locale/about": {        fr: "/:locale/a-propos",        es: "/:locale/acerca-de",      },      "/:locale/products/:id": {        fr: "/:locale/produits/:id",        es: "/:locale/productos/:id",      },    }),  },};export default config;
    intlayer.config.ts
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    import { Locales, type IntlayerConfig } from "intlayer";import { tanstackRouterRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ... (weitere Konfiguration)  routing: {    mode: "prefix-all",    rewrite: tanstackRouterRewrite({      "/$locale/about": {        fr: "/$locale/a-propos",        es: "/$locale/acerca-de",      },      "/$locale/products/$id": {        fr: "/$locale/produits/$id",        es: "/$locale/productos/$id",      },    }),  },};export default config;
    intlayer.config.ts
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    import { Locales, type IntlayerConfig } from "intlayer";import { vueRouterRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-all",    rewrite: vueRouterRewrite({      "/:locale/about": {        fr: "/:locale/a-propos",        es: "/:locale/acerca-de",      },      "/:locale/products/:id": {        fr: "/:locale/produits/:id",        es: "/:locale/productos/:id",      },    }),  },};export default config;
    intlayer.config.ts
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    import { Locales, type IntlayerConfig } from "intlayer";import { svelteKitRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ... (weitere Einstellungen)  routing: {    mode: "prefix-all",    rewrite: svelteKitRewrite({      "/[locale]/about": {        fr: "/[locale]/a-propos",        es: "/[locale]/acerca-de",      },      "/[locale]/products/[id]": {        fr: "/[locale]/produits/[id]",        es: "/[locale]/productos/[id]",      },    }),  },};export default config;
    intlayer.config.ts
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    import { Locales, type IntlayerConfig } from "intlayer";import { solidRouterRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ... (weitere Einstellungen)  routing: {    mode: "prefix-all",    rewrite: solidRouterRewrite({      "/:locale/about": {        fr: "/:locale/a-propos",        es: "/:locale/acerca-de",      },      "/:locale/products/:id": {        fr: "/:locale/produits/:id",        es: "/:locale/productos/:id",      },    }),  },};export default config;
    intlayer.config.ts
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    import { Locales, type IntlayerConfig } from "intlayer";import { nuxtRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-all",    rewrite: nuxtRewrite({      "/[locale]/about": {        fr: "/[locale]/a-propos",        es: "/[locale]/acerca-de",      },      "/[locale]/products/[id]": {        fr: "/[locale]/produits/[id]",        es: "/[locale]/productos/[id]",      },    }),  },};export default config;

    Verfügbare Formatierer

    Intlayer stellt Formatierer für alle gängigen Frameworks bereit:

    • nextjsRewrite: Für Next.js App Router. Unterstützt [slug], [...slug] (1+), und [[...slug]] (0+).
    • svelteKitRewrite: Für SvelteKit. Unterstützt [slug], [...path] (0+), und [[optional]] (0-1).
    • reactRouterRewrite: Für React Router. Unterstützt :slug und * (0+).
    • vueRouterRewrite: Für Vue Router 4. Unterstützt :slug, :slug? (0-1), :slug* (0+), und :slug+ (1+).
    • solidRouterRewrite: Für Solid Router. Unterstützt :slug und *slug (0+).
    • tanstackRouterRewrite: Für TanStack Router. Unterstützt $slug und * (0+).
    • nuxtRewrite: Für Nuxt 3. Unterstützt [slug] und [...slug] (0+).
    • viteRewrite: Generischer Formatter für jedes Vite-basierte Projekt. Normalisiert die Syntax für den Vite-Proxy.

    Erweiterte Muster

    Intlayer normalisiert diese Muster intern in eine einheitliche Syntax, die ausgefeilte Pfadabgleiche und -generierung ermöglicht:

    • Optionale Segmente: [[optional]] (SvelteKit) oder :slug? (Vue/React) werden unterstützt.
    • Catch-all (null oder mehr): [[...slug]] (Next.js), [...path] (SvelteKit/Nuxt) oder * (React/TanStack) erlauben das Abgleichen mehrerer Segmente.
    • Verpflichtendes Catch-all (eins oder mehr): [...slug] (Next.js) oder :slug+ (Vue) stellen sicher, dass mindestens ein Segment vorhanden ist.

    Client-seitige URL-Korrektur: useRewriteURL

    Um sicherzustellen, dass die Adressleiste des Browsers stets die "schöne" lokalisierte URL anzeigt, stellt Intlayer den Hook useRewriteURL zur Verfügung. Dieser Hook aktualisiert die URL im Hintergrund mit window.history.replaceState, wenn ein Benutzer auf einen kanonischen Pfad gelangt.

    Verwendung in Frameworks

    tsx
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    'use client';import { useRewriteURL } from "next-intlayer";const MyLayout = ({ children }) => {  useRewriteURL(); // Korrigiert automatisch /fr/about in /fr/a-propos  return <>{children}</>;};
    tsx
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    'use client';import { useRewriteURL } from "react-intlayer";const MyLayout = ({ children }) => {  useRewriteURL(); // Korrigiert automatisch /fr/about zu /fr/a-propos  return <>{children}</>;};
    vue
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    <script setup>import { useRewriteURL } from "vue-intlayer";useRewriteURL();</script>
    tsx
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    import { useRewriteURL } from "solid-intlayer";const Layout = (props) => {  useRewriteURL();  return <>{props.children}</>;};
    svelte
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    <script>import { useRewriteURL } from "svelte-intlayer";useRewriteURL();</script>

    Router-Integration & Proxys

    Die serverseitigen Proxies von Intlayer (Vite & Next.js) behandeln benutzerdefinierte Umschreibungen automatisch, um die SEO-Konsistenz sicherzustellen.

    1. Interne Umschreibungen: Wenn ein Benutzer /fr/a-propos besucht, leitet der Proxy ihn intern auf /fr/about um, sodass Ihr Framework die korrekte Route findet.
    2. Verbindliche Weiterleitungen: Wenn ein Benutzer manuell /fr/about eingibt, sendet der Proxy eine 301/302-Weiterleitung zu /fr/a-propos, sodass Suchmaschinen nur eine Version der Seite indexieren.

    Next.js-Integration

    Die Next.js-Integration wird vollständig über die intlayerProxy-Middleware gehandhabt.

    middleware.ts
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    import { intlayerProxy } from "next-intlayer/middleware";import { NextRequest } from "next/server";export function middleware(request: NextRequest) {  return intlayerProxy(request);}

    Vite-Integration

    Für SolidJS, Vue und Svelte verwaltet das intlayerProxy-Vite-Plugin die Rewrites während der Entwicklung.

    vite.config.ts
    Code kopieren

    Kopieren Sie den Code in die Zwischenablage

    import { defineConfig } from "vite";import { intlayerProxy } from "vite-intlayer";export default defineConfig({  plugins: [intlayerProxy()],});

    Hauptmerkmale

    1. Rewrites für mehrere Kontexte

    Jeder Formatter erzeugt ein RewriteObject, das spezialisierte Regeln für verschiedene Konsumenten enthält:

    • url: Optimiert für clientseitige URL-Erzeugung (entfernt Locale-Segmente).
    • nextjs: Bewahrt [locale] für Next.js-Middleware.
    • vite: Bewahrt :locale für Vite-Proxies.

    2. Automatische Pattern-Normalisierung

    Intlayer normalisiert intern alle Muster-Syntaxen (z. B. die Umwandlung von [param] in :param), sodass das Matching unabhängig vom Quellframework konsistent bleibt.

    3. SEO: Kanonische URLs

    Durch das Erzwingen von Weiterleitungen von kanonischen Pfaden zu sprechenden Aliasen verhindert Intlayer Probleme mit doppelten Inhalten und verbessert die Auffindbarkeit der Seite.

    Kernwerkzeuge

    • getLocalizedUrl(url, locale): Generiert eine lokalisierte URL unter Berücksichtigung der Rewrite-Regeln.
    • getCanonicalPath(path, locale): Wandelt eine lokalisierte URL zurück in ihren internen kanonischen Pfad.
    • getRewritePath(pathname, locale): Erkennt, ob ein Pfadname auf seinen schöneren lokalisierten Alias korrigiert werden muss.
    Warum Intlayer?
    Alt+→

    Auf dieser Seite

      Diskussionen sind anonym und werden regelmäßig überprüft, um häufige Probleme zu behandeln. Teilen Sie gerne Feature-Ideen, Feedback zur Dokumentation oder alles rund um Intlayer, wir nutzen diese Eingaben, um unsere Roadmap zu gestalten und das Produkt zu verbessern.

      import { Locales, type IntlayerConfig } from "intlayer";import { nextjsRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-no-default",    rewrite: nextjsRewrite({      "/[locale]/about": {        fr: "/[locale]/a-propos",        es: "/[locale]/acerca-de",      },      "/[locale]/products/[id]": {        fr: "/[locale]/produits/[id]",        es: "/[locale]/productos/[id]",      },    }),  },};export default config;
      import { Locales, type IntlayerConfig } from "intlayer";import { reactRouterRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-all",    rewrite: reactRouterRewrite({      "/:locale/about": {        fr: "/:locale/a-propos",        es: "/:locale/acerca-de",      },      "/:locale/products/:id": {        fr: "/:locale/produits/:id",        es: "/:locale/productos/:id",      },    }),  },};export default config;
      import { Locales, type IntlayerConfig } from "intlayer";import { tanstackRouterRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ... (weitere Konfiguration)  routing: {    mode: "prefix-all",    rewrite: tanstackRouterRewrite({      "/$locale/about": {        fr: "/$locale/a-propos",        es: "/$locale/acerca-de",      },      "/$locale/products/$id": {        fr: "/$locale/produits/$id",        es: "/$locale/productos/$id",      },    }),  },};export default config;
      import { Locales, type IntlayerConfig } from "intlayer";import { vueRouterRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-all",    rewrite: vueRouterRewrite({      "/:locale/about": {        fr: "/:locale/a-propos",        es: "/:locale/acerca-de",      },      "/:locale/products/:id": {        fr: "/:locale/produits/:id",        es: "/:locale/productos/:id",      },    }),  },};export default config;
      import { Locales, type IntlayerConfig } from "intlayer";import { svelteKitRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ... (weitere Einstellungen)  routing: {    mode: "prefix-all",    rewrite: svelteKitRewrite({      "/[locale]/about": {        fr: "/[locale]/a-propos",        es: "/[locale]/acerca-de",      },      "/[locale]/products/[id]": {        fr: "/[locale]/produits/[id]",        es: "/[locale]/productos/[id]",      },    }),  },};export default config;
      import { Locales, type IntlayerConfig } from "intlayer";import { solidRouterRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ... (weitere Einstellungen)  routing: {    mode: "prefix-all",    rewrite: solidRouterRewrite({      "/:locale/about": {        fr: "/:locale/a-propos",        es: "/:locale/acerca-de",      },      "/:locale/products/:id": {        fr: "/:locale/produits/:id",        es: "/:locale/productos/:id",      },    }),  },};export default config;
      import { Locales, type IntlayerConfig } from "intlayer";import { nuxtRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  routing: {    mode: "prefix-all",    rewrite: nuxtRewrite({      "/[locale]/about": {        fr: "/[locale]/a-propos",        es: "/[locale]/acerca-de",      },      "/[locale]/products/[id]": {        fr: "/[locale]/produits/[id]",        es: "/[locale]/productos/[id]",      },    }),  },};export default config;
      'use client';import { useRewriteURL } from "next-intlayer";const MyLayout = ({ children }) => {  useRewriteURL(); // Korrigiert automatisch /fr/about in /fr/a-propos  return <>{children}</>;};
      'use client';import { useRewriteURL } from "react-intlayer";const MyLayout = ({ children }) => {  useRewriteURL(); // Korrigiert automatisch /fr/about zu /fr/a-propos  return <>{children}</>;};
      <script setup>import { useRewriteURL } from "vue-intlayer";useRewriteURL();</script>
      import { useRewriteURL } from "solid-intlayer";const Layout = (props) => {  useRewriteURL();  return <>{props.children}</>;};
      <script>import { useRewriteURL } from "svelte-intlayer";useRewriteURL();</script>
      import { intlayerProxy } from "next-intlayer/middleware";import { NextRequest } from "next/server";export function middleware(request: NextRequest) {  return intlayerProxy(request);}
      import { defineConfig } from "vite";import { intlayerProxy } from "vite-intlayer";export default defineConfig({  plugins: [intlayerProxy()],});