# 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
