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:
- Nøyaktig filmatch: Hvis
/content/om.htmleksisterer, server den - Mappe med sidefil: Hvis
/content/om/inneholderpage.md, server den - Mappe med enkeltfil: Hvis
/content/blogg/innlegg/inneholderarticle.md, server den - 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):
single.phpsingle.htmlsingle.mdpost.phppost.htmlpost.mdarticle.phparticle.htmlarticle.md
For overordnede sider:
page.phppage.htmlpage.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