innhold/content/docs/utvikling/forklaring/routing/page.md

2.7 KiB

Forstå ruting i PnP

PnP bruker et enkelt, intuitivt mappebasert rutingssystem som kobler mapper direkte til URL-er.

Filosofien

Tradisjonelle webrammeverk krever at du definerer ruter i konfigurasjonsfiler. PnP tar en annen tilnærming: mappestrukturen ER rutekonfigurasjonen din.

Dette designvalget prioriterer:

  • Enkelhet: Ingen rutdefinisjoner å vedlikeholde
  • Forutsigbarhet: URL-er matcher mappestrukturen nøyaktig
  • Vedlikeholdbarhet: Lett å forstå selv år senere

Hvordan det fungerer

URL til fil-mapping

Når en forespørsel kommer inn, følger ruteren denne logikken:

  1. Nøyaktig filmatch: Hvis /content/om.html eksisterer, server den
  2. Mappe med sidefil: Hvis /content/om/ inneholder page.md, server den
  3. Mappe med enkeltfil: Hvis /content/blogg/innlegg/ inneholder article.md, server den
  4. Mappelisting: Hvis /content/blogg/ inneholder undermapper, list dem

Skråstrek-atferd

PnP omdirigerer automatisk mappebaserte sider til å inkludere skråstrek på slutten:

  • /blogg/mitt-innlegg/blogg/mitt-innlegg/ (301 redirect)

Dette sikrer at relative stier i markdown fungerer korrekt (bilder, lenker, etc).

Filprioritet

Når PnP ser etter innhold i en mappe, søker den etter filer i denne rekkefølgen:

For enkle sider (artikler, innlegg):

  1. single.php
  2. single.html
  3. single.md
  4. post.php
  5. post.html
  6. post.md
  7. article.php
  8. article.html
  9. article.md

For overordnede sider:

  1. page.php
  2. page.html
  3. page.md

Språkvariasjoner

PnP støtter flerspråklige sider. For språk som ikke er standardspråket, søker ruteren etter språkspesifikke filer først:

page.en.md  → Engelsk versjon
page.md     → Norsk versjon (standard)

URL-strukturen blir:

/om/        → Norsk (standard)
/en/about/  → Engelsk

Egendefinerte indekssider

Du kan overstyre standard mappelisting ved å lage en index.php-fil i en hvilken som helst mappe.

Mappenavn med datoer

PnP trekker automatisk ut datoer fra mappenavn:

/content/blogg/2025-01-15-mitt-innlegg/

Datoen formateres automatisk til norsk format: "15. januar 2025"

Hvorfor denne tilnærmingen?

Dette rutingssystemet vil fungere i flere tiår fordi:

  • Ingen komplekse avhengigheter
  • Ingen rutdefinisjoner som blir utdaterte
  • Filsystemoperasjoner er standardiserte og stabile
  • Enkelt å migrere eller ta backup (bare kopier mapper)
  • Ingen abstraksjoner som skjuler underliggende struktur
  • Ingen kompilering eller cache-generering nødvendig

Sikkerhet

Ruteren validerer alle stier for å forhindre directory traversal-angrep:

  • Filer må være innenfor document root
  • Realpaths sjekkes mot contentDir
  • Kun godkjente filtyper serveres