HomeAmbiente di testVetrinaAppDocBlog
    • Englishinglese
      EN
    • русскийrusso
      RU
    • 日本語giapponese
      JA
    • françaisfrancese
      FR
    • 한국어coreano
      KO
    • 中文cinese
      ZH
    • españolspagnolo
      ES
    • Deutschtedesco
      DE
    • العربيةarabo
      AR
    • italianoitaliano
      IT
    • British Englishinglese britannico
      EN-GB
    • portuguêsportoghese
      PT
    • हिन्दीhindi
      HI
    • Türkçeturco
      TR
    • polskipolacco
      PL
    • Indonesiaindonesiano
      ID
    • Tiếng Việtvietnamita
      VI
    • українськаucraino
      UK
    /
    Filtra la documentazione per framework
    Alt+←
    Perché Intlayer?
    Iniziare
    Concetto
    • Come funziona Intlayer
    • Configurazione
    • TestFillBuildWatchExtractLoginPushPullConfigurationListVersionEditorLiveDebugDoc ReviewDoc TranslateSDK
    • Editor visuale
    • CMS
    • Integrazione CI/CD
    • TraduzionePluraleEnumerazioneCondizioneGenereInserimentoFileAnnidamentoMarkdownHTMLRecupero funzione
    • File per locale
    • Compilatore
    • Compilazione automatica
    • Test
    • Ottimizzazione del bundle
    Ambiente
    • Next.js 14 e App Router
      Next.js 15
      Next.js senza locale URL
      Next.js e Page Router
      Compiler
    • Tanstack Start Solid
    • Astro e React
      Astro e Svelte
      Astro e Vue
      Astro e Solid
      Astro e Preact
      Astro e Lit
      Astro e Vanilla JS
    • React Router v7
      React Router v7 (fs-routes)
      Compiler
    • Nuxt e Vue
    • Vite e Solid
    • SvelteKit
    • Vite e Preact
    • Vite e Vanilla JS
    • Vite e Lit
    • Angular 19 (Webpack)
      Analog
    • React CRA
    • React Native e Expo
    • Express.js
      NestJS
      Fastify
      Hono
      Adonis
    • Lynx e React
    Plugins
    • JSON
    • gettext (.po)
    Estensione VS Code
    Agente
    • Server MCP
    • Abilità dell’agente
    Versioni
    • v8
    • v7
    • v6
    Benchmark
    • Next.js
    • TanStack
    • Vue
    • Solid
    • Svelte
    Blog
    Fai una domanda
    1. Documentation
    2. Concetto
    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## Integrazione del router e proxy\n\nI proxy server-side di Intlayer (Vite e Next.js) gestiscono automaticamente le riscritture personalizzate per garantire la coerenza SEO.\n\n1. **Riscritture interne**: quando un utente visita `/fr/a-propos`, il proxy lo mappa internamente a `/fr/about` in modo che il tuo framework corrisponda alla route corretta.\n2. **Reindirizzamenti autorevoli**: se un utente digita manualmente `/fr/about`, il proxy emette un redirect 301/302 verso `/fr/a-propos`, assicurando che i motori di ricerca indicizzino solo una versione della pagina.\n\n### Integrazione Next.js\n\nL'integrazione con Next.js è gestita interamente tramite il middleware `intlayerProxy`.\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### Integrazione con Vite\n\nPer SolidJS, Vue e Svelte, il plugin Vite `intlayerProxy` gestisce le riscritture durante lo sviluppo.\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## Caratteristiche principali\n\n### 1. Riscritture multi-contesto\n\nOgni formatter genera un `RewriteObject` che contiene regole specializzate per diversi consumer:\n\n- `url`: Ottimizzato per la generazione di URL lato client (rimuove i segmenti di locale).\n- `nextjs`: Conserva `[locale]` per il middleware di Next.js.\n- `vite`: Conserva `:locale` per i proxy Vite.\n\n### 2. Normalizzazione automatica dei pattern\n\nIntlayer normalizza internamente tutte le sintassi dei pattern (ad es., convertendo `[param]` in `:param`) in modo che il matching rimanga coerente indipendentemente dal framework di origine.\n\n### 3. URL autorevoli per la SEO\n\nForzando i redirect dai percorsi canonici verso alias più \"puliti\" (pretty aliases), Intlayer previene problemi di contenuto duplicato e migliora la visibilità del sito.\n\n## Utilità principali\n\n- `getLocalizedUrl(url, locale)`: Genera un URL localizzato rispettando le regole di rewrite.\n- `getCanonicalPath(path, locale)`: Risolve un URL localizzato tornando al suo percorso canonico interno.\n- `getRewritePath(pathname, locale)`: Rileva se un pathname deve essere corretto nel suo alias localizzato più \"pulito\".\n","about":"Scopri come configurare e utilizzare le riscritture URL personalizzate in Intlayer per definire percorsi specifici per lingua.","url":"https://intlayer.org/it/doc/concept/custom_url_rewrites","datePublished":"13-08-2024","dateModified":"26-01-2026","keywords":"Riscritture URL personalizzate, Routing, Internationalization, i18n","license":"https://raw.githubusercontent.com/aymericzip/intlayer/refs/heads/main/LICENSE","audience":{"@type":"Audience","audienceType":"Sviluppatori, Manager dei contenuti"}}
    Creazione:2024-08-13Ultimo aggiornamento:2026-01-26
    Riferimento a questa documentazione al tuo assistente AI preferito
    ChatGPT
    Claude
    DeepSeek
    Google AI mode
    Gemini
    Perplexity
    Mistral
    Grok

    Pose una domanda e ottieni un riassunto del documento facendo riferimento a questa pagina e al provider AI di tua scelta

    Cronologia delle versioni

    1. "Implementazione di riscritture URL centralizzate con formatter specifici per framework e l'hook useRewriteURL."
      v8.0.025/01/2026

    Il contenuto di questa pagina è stato tradotto con un'IA.

    Vedi l'ultima versione del contenuto originale in inglese
    Modifica questa documentazione

    Se hai un’idea per migliorare questa documentazione, non esitare a contribuire inviando una pull request su GitHub.

    Collegamento GitHub alla documentazione
    Copia

    Copia il Markdown del documento nella porta-documenti

    Implementazione delle riscritture URL personalizzate

    Intlayer supporta riscritture URL personalizzate, permettendoti di definire percorsi specifici per ciascuna lingua che differiscono dalla struttura standard /locale/path. In questo modo è possibile avere URL come /about per l'inglese e /a-propos per il francese, mantenendo però la logica interna dell'applicazione canonica.

    Configurazione

    Le riscritture personalizzate vengono configurate nella sezione routing del file intlayer.config.ts, utilizzando i formatter specifici per framework. Questi formatter forniscono la sintassi corretta per il router che preferisci.

    intlayer.config.ts
    Copiare il codice

    Copiare il codice nella clipboard

    import { Locales, type IntlayerConfig } from "intlayer";import { nextjsRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ... (altre impostazioni)  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
    Copiare il codice

    Copiare il codice nella clipboard

    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
    Copiare il codice

    Copiare il codice nella clipboard

    import { Locales, type IntlayerConfig } from "intlayer";import { tanstackRouterRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  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
    Copiare il codice

    Copiare il codice nella clipboard

    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
    Copiare il codice

    Copiare il codice nella clipboard

    import { Locales, type IntlayerConfig } from "intlayer";import { svelteKitRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  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
    Copiare il codice

    Copiare il codice nella clipboard

    import { Locales, type IntlayerConfig } from "intlayer";import { solidRouterRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ...  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
    Copiare il codice

    Copiare il codice nella clipboard

    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;

    Formattatori disponibili

    Intlayer fornisce formatter per tutti i framework più diffusi:

    • nextjsRewrite: Per Next.js App Router. Supporta [slug], [...slug] (1+), e [[...slug]] (0+).
    • svelteKitRewrite: Per SvelteKit. Supporta [slug], [...path] (0+), e [[optional]] (0-1).
    • reactRouterRewrite: Per React Router. Supporta :slug e * (0+).
    • vueRouterRewrite: Per Vue Router 4. Supporta :slug, :slug? (0-1), :slug* (0+), e :slug+ (1+).
    • solidRouterRewrite: Per Solid Router. Supporta :slug e *slug (0+).
    • tanstackRouterRewrite: Per TanStack Router. Supporta $slug e * (0+).
    • nuxtRewrite: Per Nuxt 3. Supporta [slug] e [...slug] (0+).
    • viteRewrite: Formatter generico per qualsiasi progetto basato su Vite. Normalizza la sintassi per il proxy di Vite.

    Pattern avanzati

    Intlayer normalizza internamente questi pattern in una sintassi unificata, consentendo la corrispondenza e la generazione sofisticata dei percorsi:

    • Segmenti opzionali: [[optional]] (SvelteKit) o :slug? (Vue/React) sono supportati.
    • Catch-all (zero o più): [[...slug]] (Next.js), [...path] (SvelteKit/Nuxt) o * (React/TanStack) consentono di corrispondere a più segmenti.
    • Catch-all obbligatorio (uno o più): [...slug] (Next.js) o :slug+ (Vue) garantiscono che sia presente almeno un segmento.

    Correzione dell'URL lato client: useRewriteURL

    Per garantire che la barra degli indirizzi del browser rifletta sempre l'URL localizzato "pulito", Intlayer fornisce l'hook useRewriteURL. Questo hook aggiorna silenziosamente l'URL usando window.history.replaceState quando un utente arriva su un percorso canonico.

    Utilizzo nei framework

    tsx
    Copiare il codice

    Copiare il codice nella clipboard

    'use client';import { useRewriteURL } from "next-intlayer";const MyLayout = ({ children }) => {  useRewriteURL(); // Corregge automaticamente /fr/about in /fr/a-propos  return <>{children}</>;};
    tsx
    Copiare il codice

    Copiare il codice nella clipboard

    'use client';import { useRewriteURL } from "react-intlayer";const MyLayout = ({ children }) => {  useRewriteURL(); // Corregge automaticamente /fr/about in /fr/a-propos  return <>{children}</>;};
    vue
    Copiare il codice

    Copiare il codice nella clipboard

    <script setup>import { useRewriteURL } from "vue-intlayer";useRewriteURL();</script>
    tsx
    Copiare il codice

    Copiare il codice nella clipboard

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

    Copiare il codice nella clipboard

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

    Integrazione del router e proxy

    I proxy server-side di Intlayer (Vite e Next.js) gestiscono automaticamente le riscritture personalizzate per garantire la coerenza SEO.

    1. Riscritture interne: quando un utente visita /fr/a-propos, il proxy lo mappa internamente a /fr/about in modo che il tuo framework corrisponda alla route corretta.
    2. Reindirizzamenti autorevoli: se un utente digita manualmente /fr/about, il proxy emette un redirect 301/302 verso /fr/a-propos, assicurando che i motori di ricerca indicizzino solo una versione della pagina.

    Integrazione Next.js

    L'integrazione con Next.js è gestita interamente tramite il middleware intlayerProxy.

    middleware.ts
    Copiare il codice

    Copiare il codice nella clipboard

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

    Integrazione con Vite

    Per SolidJS, Vue e Svelte, il plugin Vite intlayerProxy gestisce le riscritture durante lo sviluppo.

    vite.config.ts
    Copiare il codice

    Copiare il codice nella clipboard

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

    Caratteristiche principali

    1. Riscritture multi-contesto

    Ogni formatter genera un RewriteObject che contiene regole specializzate per diversi consumer:

    • url: Ottimizzato per la generazione di URL lato client (rimuove i segmenti di locale).
    • nextjs: Conserva [locale] per il middleware di Next.js.
    • vite: Conserva :locale per i proxy Vite.

    2. Normalizzazione automatica dei pattern

    Intlayer normalizza internamente tutte le sintassi dei pattern (ad es., convertendo [param] in :param) in modo che il matching rimanga coerente indipendentemente dal framework di origine.

    3. URL autorevoli per la SEO

    Forzando i redirect dai percorsi canonici verso alias più "puliti" (pretty aliases), Intlayer previene problemi di contenuto duplicato e migliora la visibilità del sito.

    Utilità principali

    • getLocalizedUrl(url, locale): Genera un URL localizzato rispettando le regole di rewrite.
    • getCanonicalPath(path, locale): Risolve un URL localizzato tornando al suo percorso canonico interno.
    • getRewritePath(pathname, locale): Rileva se un pathname deve essere corretto nel suo alias localizzato più "pulito".
    Perché Intlayer?
    Alt+→

    In questa pagina

      Le discussioni sono anonime e vengono regolarmente esaminate per affrontare problemi comuni. Sentiti libero di condividere idee per nuove funzionalità, feedback sulla documentazione o qualsiasi cosa relativa a Intlayer, utilizziamo questi input per definire la nostra roadmap e migliorare il prodotto.

      import { Locales, type IntlayerConfig } from "intlayer";import { nextjsRewrite } from "intlayer/routing";const config: IntlayerConfig = {  // ... (altre impostazioni)  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 = {  // ...  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 = {  // ...  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 = {  // ...  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(); // Corregge automaticamente /fr/about in /fr/a-propos  return <>{children}</>;};
      'use client';import { useRewriteURL } from "react-intlayer";const MyLayout = ({ children }) => {  useRewriteURL(); // Corregge automaticamente /fr/about in /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()],});