Introduksjon til Apache mod_rewrite
.htaccess-filen er et av de kraftigste verktøyene i en WordPress-administrators arsenal. Denne konfigurasjonsfilen lar deg overstyre serverinnstillinger på katalognivå, noe som gir deg granulær kontroll over URL-omdirigeringer, tilgangsrestriksjoner og ytelsesoptimaliseringer.
Hva er mod_rewrite?
mod_rewrite er en Apache-modul som gir en regelbasert omskrivningsmotor for å omskrive forespurte URL-er på flyet. Det er motoren bak WordPress sine pen permalinks og er essensiell for moderne SEO-vennlige URL-strukturer.
Viktige fordeler:
- SEO-bevaring: Omdiriger gamle URL-er til nye uten å miste søkerangeringer
- Brukeropplevelse: Sørg for at besøkende alltid når riktig innhold
- Sikkerhet: Tving HTTPS og blokkere ondsinnede forespørsler
- Ytelse: Implementer caching-headere og komprimering
Når du skal bruke 301 vs 302-omdirigeringer
Forståelse av HTTP-statuskoder er avgjørende for riktig SEO-implementering:
| Omdirigeringstype | Brukstilfelle | SEO-påvirkning |
|---|---|---|
| 301 Permanent | Innhold flyttet permanent, domeneskifter, HTTPS-migrasjon | Overfører 90-99% link equity, søkemotorer oppdaterer indeks |
| 302 Funnet | Midlertidig vedlikehold, A/B-testing, kortsiktige innholdsflyttinger | Ingen link equity overført, original URL forblir indeksert |
| 307 Midlertidig | Streng HTTP/1.1 midlertidig omdirigering, POST-data bevaring | Samme som 302 men bevarer HTTP-metode |
| 308 Permanent | Streng HTTP/1.1 permanent omdirigering, POST-data bevaring | Samme som 301 men bevarer HTTP-metode |
Gylden regel: Hvis endringen er permanent, bruk alltid 301. Å bruke 302 for permanente flyttinger kan betydelig skade dine SEO-rangeringer.
Vanlige omdirigeringsscenarier
1. Enkeltside-omdirigeringer
Den enkleste formen for omdirigering flytter én spesifikk URL til en annen:
# Omdiriger en enkeltside (enkel syntaks)
Redirect 301 /gammel-side.html https://www.domenet.com/ny-side.html
# Alternativ ved hjelp av RewriteRule
RewriteEngine on
RewriteRule ^gammel-side\.html$ /ny-side.html [R=301,L]Når du skal bruke hver:
- Bruk
Redirect 301for enkle, eksakte URL-treff - Bruk
RewriteRulenår du trenger mønstermatching eller betingelser
2. Omdirigering av hele nettstedet
Å flytte hele nettstedet til et nytt domene krever nøye håndtering:
# Omdiriger hele nettstedet til nytt domene
Redirect 301 / https://www.nyttdomene.com/
# Bevar full URL-struktur
RewriteEngine on
RewriteBase /
RewriteRule (.*) https://www.nyttdomene.com/$1 [R=301,L]Viktig: Test alltid med noen få URL-er først før du implementerer nettstedsvide omdirigeringer.
3. Undermappe til rot (eller omvendt)
Vanlig ved restrukturering av innhold:
# Omdiriger hele nettstedet til en undermappe
Redirect 301 / https://www.domenet.com/undermappe/
# Omdiriger undermappe til et annet nettsted
Redirect 301 /undermappe https://www.domenet.com/
# Ved hjelp av RewriteRule med full sti-bevaring
RewriteEngine on
RewriteRule ^undermappe/(.*)$ /$1 [R=301,L]4. Filendringsendringer
Ved migrering fra .html til .php eller implementering av pene permalinks:
# Omdiriger .html til .php
RedirectMatch 301 (.*)\.html$ https://www.domenet.com$1.php
# Fjern .php-utvidelse (gjør URL-er renere)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]5. Tving HTTPS (SSL)
Essensielt for sikkerhet og SEO:
# Tving HTTPS - Metode 1 (enkel)
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Tving HTTPS - Metode 2 (med www-håndtering)
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.domenet.com/$1 [L,R=301]6. Tving www eller ikke-www
Konsistens i URL-struktur betyr noe for SEO:
# Tving www
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domenet.com [NC]
RewriteRule ^(.*)$ https://www.domenet.com/$1 [L,R=301]
# Tving ikke-www (naken domene)
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.domenet\.com [NC]
RewriteRule ^(.*)$ http://domenet.com/$1 [L,R=301]Avanserte Rewrite-regler
Query String-omdirigeringer
Håndtering av URL-er med parametere krever spesiell oppmerksomhet:
# Omdiriger spesifikk query-parameter
RewriteEngine on
RewriteCond %{QUERY_STRING} id=1
RewriteRule ^index.php$ /sti-til-ny-lokasjon/? [R=301,L]
# Omdiriger med query string-bevaring
RewriteEngine On
RewriteCond %{QUERY_STRING} ^category=([^&]+)
RewriteRule ^index.php$ /kategori/%1/? [R=301,L]
# Fjern query strings helt
RewriteEngine On
RewriteCond %{QUERY_STRING} .
RewriteRule ^$ /? [R=301,L]Merk: Etterfølgende ? i destinasjons-URL fjerner den originale query string.
Mønstermatching med Regex
Regulære uttrykk gir kraftig mønstermatching:
# Omdiriger datobaserte URL-er
RewriteEngine On
RewriteRule ^blog/([0-9]{4})/([0-9]{2})/(.+)$ /nyheter/$1/$2/$3 [R=301,L]
# Omdiriger med wildcards
RewriteEngine On
RewriteRule ^produkter/(.*)$ /butikk/$1 [R=301,L]
# Flere mønstermatchinger
RewriteEngine On
RewriteRule ^(blog|nyheter|artikler)/(.+)$ /innhold/$2 [R=301,L]Domeneskifte med sti-bevaring
Ved migrering til et helt nytt domene:
# Gammelt domene til nytt domene med full sti
RewriteEngine On
RewriteCond %{HTTP_HOST} ^gammelt-domene.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.gammelt-domene.com$
RewriteRule (.*)$ https://www.nytt-domene.com/$1 [R=301,L]
# Med undermappejustering
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/blog/(.*)$
RewriteRule ^(.*)$ https://www.nyttdomene.com/nyheter/%1 [R=301,L]Testing av omdirigeringer på en sikker måte
Før du går live
- Bruk 302 Midlertidig først: Test med 302-omdirigeringer før du gjør dem permanente
- Sjekk omdirigeringskjeder: Sørg for at du ikke oppretter omdirigeringsløkker
- Test flere scenarier: Sjekk med og uten www, HTTP og HTTPS
- Valider med verktøy: Bruk online omdirigeringsjekkere
Testmetoder
# Bruke curl for å sjekke headere
curl -I http://dittdomene.com/gammel-side
# Følg omdirigeringer med curl
curl -L http://dittdomene.com/gammel-side
# Sjekk spesifikke statuskoder
curl -I -L http://dittdomene.com/gammel-side 2>&1 | grep HTTPOnline testverktøy
- Redirect Checker: httpstatus.io
- HTTP Status: httpstatus.io
- Google Search Console: Sjekk for crawl-feil etter implementering
Feilsøking av omdirigeringsløkker
Vanlige årsaker
- Sirkulære referanser: Regel A omdirigerer til B, Regel B omdirigerer tilbake til A
- Protokollfeil: HTTP-regel i konflikt med HTTPS-tvinging
- WWW-konflikter: www og ikke-www-regler som kjemper mot hverandre
- WordPress-konflikter: Plugin-omdirigeringer i konflikt med .htaccess
Diagnosesteg
# Legg til dette midlertidig for å se hva som skjer
RewriteEngine On
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3Merk: Dette krever servernivå-tilgang og bør fjernes etter feilsøking.
Løsninger
# Forhindre løkker ved å sjekke om allerede omdirigert
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
# Spesifikk protokollhåndtering for å unngå løkker
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]Ytelsespåvirkning av .htaccess-regler
Forstå kostnaden
Hver RewriteRule legger til prosesserings overhead:
- Enkle omdirigeringer: Minimal påvirkning (< 1ms)
- Kompleks Regex: Moderat påvirkning (1-5ms per regel)
- Flere betingelser: Kumulativ påvirkning (5-20ms+)
Optimaliseringsbeste praksis
- Rekkefølge betyr noe: Plasser mest brukte regler først
- Bruk spesifikke mønstre: Mer spesifikke mønstre er raskere
- Begrens Regex-kompleksitet: Unngå grådige kvantifikatorer hvor mulig
- Vurder servernivå-konfig: For høytrafikk-nettsteder, bruk httpd.conf i stedet
# Optimalisert rekkefølge-eksempel
RewriteEngine On
# Mest vanlige omdirigeringer først
RewriteRule ^wp-admin$ /wp-admin/ [R=301,L]
# Deretter spesifikke mønstre
RewriteRule ^gammelt-produkt/(.*)$ /butikk/$1 [R=301,L]
# Generiske mønstre sist
RewriteRule ^blog/(.*)$ /nyheter/$1 [R=301,L]Vurderinger for caching
# Aktiver mod_expires for bedre caching
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 month"
</IfModule>
# Aktiver komprimering
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript
</IfModule>WordPress-spesifikke vurderinger
Integrasjon med WordPress Rewrite-regler
WordPress bruker sine egne rewrite-regler i .htaccess. Plasser alltid egne regler før WordPress-blokken:
# BEGIN Egne omdirigeringer
RewriteEngine On
# Dine egne regler her
# END Egne omdirigeringer
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPressVanlige WordPress-omdirigeringsscenarier
# Omdiriger vedleggssider til foreldreinnlegg
RewriteEngine On
RewriteRule ^attachment/(.*)$ / [R=301,L]
# Omdiriger forfatterarkiver til hjemmeside
RewriteEngine On
RewriteRule ^author/(.*)$ / [R=301,L]
# Omdiriger kategoriarkiver til spesifikk side
RewriteEngine On
RewriteRule ^category/gammel-kategori$ /ny-seksjon/ [R=301,L]Sikkerhetsvurderinger
Beskytte sensitive filer
# Blokker tilgang til sensitive WordPress-filer
<FilesMatch "^\.">
Order allow,deny
Deny from all
</FilesMatch>
# Beskytt wp-config.php
<Files wp-config.php>
order allow,deny
deny from all
</Files>
# Blokker tilgang til .htaccess selv
<Files .htaccess>
order allow,deny
deny from all
</Files>Blokkere ondsinnede forespørsler
# Blokker SQL-injeksjonsforsøk
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]Komplett referanse: Omdirigeringstyper
Enkel omdirigeringssyntaks
# Grunnleggende 301-omdirigering
Redirect 301 /gammel /ny
# 302 midlertidig omdirigering
Redirect 302 /vedlikehold /temp-side
# Omdirigering med full URL
Redirect 301 /side http://example.com/ny-sideRedirectMatch-syntaks
# Mønsterbasert omdirigering
RedirectMatch 301 ^/blog/(.*)$ http://example.com/nyheter/$1
# Case-ufølsom
RedirectMatch 301 (?i)^/gammel-mappe/(.*)$ /ny-mappe/$1RewriteRule-syntaks
# Grunnleggende struktur
RewriteRule Mønster Erstatning [Flagg]
# Vanlige flagg:
# [R=301] - Permanent omdirigering
# [R=302] - Midlertidig omdirigering
# [L] - Siste regel (stopp prosessering)
# [NC] - Ingen case (case-ufølsom)
# [QSA] - Query string append
# [NE] - No escapeOppsummeringssjekkliste
Før du implementerer omdirigeringer:
- Test omdirigeringer med 302 før du gjør dem til 301
- Verifiser at ingen omdirigeringsløkker eksisterer
- Sjekk mobil- og desktop-oppførsel
- Test med både www og ikke-www URL-er
- Verifiser HTTPS-tvinging hvis aktuelt
- Overvåk Google Search Console for crawl-feil
- Oppdater interne lenker til å peke til nye URL-er
- Opprett en sikkerhetskopi av .htaccess-filen
Avansert feilsøking og optimalisering
Diagnostisering av omdirigeringsproblemer
Når omdirigeringer ikke fungerer som forventet, følg denne systematiske tilnærmingen:
# Sjekk Apache-feillogger
tail -f /var/log/apache2/error.log
# Sjekk tilgang logger for omdirigeringer
tail -f /var/log/apache2/access.log | grep "301\|302"Vanlige problemer og løsninger:
| Problem | Årsak | Løsning |
|---|---|---|
| Omdirigeringsløkke | Motstridende regler | Sjekk rekkefølge av regler |
| 404 etter omdirigering | Feil sti i mål-URL | Verifiser at målsiden eksisterer |
| Link equity ikke overført | Bruk av 302 i stedet for 301 | Endre til 301 for permanente flyttinger |
| Query string tapt | Manglende [QSA]-flagg | Legg til [QSA]-flagg |
| Case-sensitivitet | Store/små bokstaver i URL | Bruk [NC]-flagg |
Optimalisering av .htaccess-ytelse
Hver RewriteRule legger til prosesseringstid. Følg disse retningslinjene for optimal ytelse:
# Plasser generelle regler først (sjeldent brukt)
RewriteCond %{REQUEST_URI} !^/wp-admin
RewriteCond %{REQUEST_URI} !^/wp-content
RewriteCond %{REQUEST_URI} !^/wp-includes
# Mer spesifikke regler sist
RewriteRule ^spesifikk-mappe/(.*)$ /ny-mappe/$1 [R=301,L]Beste praksis for ytelse:
- Unngå regex der det ikke er nødvendig - Bruk enkle Redirect-direktiver når mulig
- Sett betingelser så tidlig som mulig - Avvis forespørsler raskt
- Bruk [L]-flagg - Stopp prosessering når regel samsvarer
- Minimer antall regler - Hver regel koster prosessering
- Unngå wildcard der mulig - Spesifikke mønstre er raskere
WordPress-spesifikke hensyn
WordPress håndterer permalinks gjennom sin egen rewrite-motor. Her er vanlige scenarier:
# Korrekt plassering: Før WordPress-blokken
# BEGIN Custom Redirects
RewriteEngine On
Redirect 301 /gammel-side /ny-side
# END Custom Redirects
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPressViktig: Plasser aldri egne regler inne i WordPress-blokken, da de vil bli overskrevet ved permalink-oppdateringer.
Håndtering av query strings
Omdirigeringer av URL-er med query strings krever spesiell oppmerksomhet:
# Omdiriger kun bestemt query string
RewriteCond %{QUERY_STRING} ^old-param=value$
RewriteRule ^side\.php$ /ny-side? [R=301,L]
# Fjern query string etter omdirigering
RewriteRule ^side\.php$ /ny-side? [R=301,L]
# Behold query string (bruk [QSA] for å legge til)
RewriteRule ^side\.php$ /ny-side [R=301,L,QSA]Trailing slash-håndtering
Inkonsistent bruk av etterfølgende skråstrek kan føre til duplikatinnhold:
# Fjern trailing slash (unntatt for mapper)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [R=301,L]
# Legg til trailing slash (unntatt for filer)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*[^/])$ /$1/ [R=301,L]Testing og validering av omdirigeringer
Verktøy for testing
Online verktøy:
- redirectcheck.com - Sjekk omdirigingskjeder
- httpstatus.io - Bulk HTTP-statuskodesjekk
- SEO Site Checkup - Omfattende SEO-analyse
Lokale verktøy:
# Bruk curl for å sjekke omdirigeringer
curl -I http://example.com/gammel-side
# Følg omdirigeringer og vis alle steg
curl -L -v http://example.com/gammel-side 2>&1 | grep "< HTTP"
# Sjekk med wget
wget --spider --recursive http://example.com/gammel-sideAutomatisert testing
Sett opp regelmessig testing av kritiske omdirigeringer:
#!/bin/bash
# test-redirects.sh
DOMAIN="example.com"
REDIRECTS=("/gammel-side1 /ny-side1"
"/gammel-side2 /ny-side2"
"/produkt /category/produkt")
for redirect in "${REDIRECTS[@]}"; do
FROM=$(echo $redirect | cut -d' ' -f1)
TO=$(echo $redirect | cut -d' ' -f2)
STATUS=$(curl -o /dev/null -w "%{http_code}" -s -L "http://${DOMAIN}${FROM}")
if [ "$STATUS" = "301" ] || [ "$STATUS" = "302" ]; then
echo "✓ $FROM -> $TO (Status: $STATUS)"
else
echo "✗ $FROM -> $TO (Status: $STATUS)"
fi
doneMigration-scenarioer
Domeneskifte
Ved flytting til nytt domene er det kritiske å bevare SEO-verdi:
# Komplett domeneskift med www-håndtering
RewriteEngine On
RewriteBase /
# Fjern www og tving HTTPS
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ http://nytt-domen.no%{REQUEST_URI} [R=301,L]
# Hvis nytt domen har www
RewriteCond %{HTTP_HOST} !^www\.nytt-domen\.no$ [NC]
RewriteRule ^(.*)$ https://www.nytt-domen.no/$1 [R=301,L]
# Omdiriger alle gamle sider
RewriteCond %{HTTP_HOST} gammelt-domen\.no [NC]
RewriteRule ^(.*)$ https://nytt-domen.no/$1 [R=301,L]HTTPS-migrasjon
Fullstendig HTTPS-migrasjon med håndtering av blandet innhold:
# Tving HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Håndter HTTP Strict Transport Security
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
# Omdiriger HTTP til HTTPS for alle subdomener
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]Strukturendringer i innhold
Ved reorganisering av innholdsstruktur:
# Kategorisk flytting
Redirect 301 /kategori/gammel-kategori /ny-kategori
# Tag-arkiv til kategorisk flytting
RewriteEngine On
RewriteRule ^tag/(.*)$ /topic/$1 [R=301,L]
# Årbasert arkiv til kategorisk
Redirect 301 /2023/ /archive/2023
Redirect 301 /2024/ /archive/2024
# PDF-dokumenter til ny mappe
RedirectMatch 301 ^/dokumenter/(.*)$ https://cdn.nytt-domen.no/dokumenter/$1Vanlige feil og hvordan unngå dem
1. Omdirigeringskjeder
Feil:
# Dårlig: Lager kjede A -> B -> C
Redirect 301 /a /b
Redirect 301 /b /cRiktig:
# Godt: Direkte omdirigering
Redirect 301 /a /c
Redirect 301 /b /c2. Manglende trailing slash
Feil:
# Kan føre til 404 for /mappe/
Redirect 301 /mappe /mappeRiktig:
# Håndter begge varianter
Redirect 301 /mappe /mappe/
Redirect 301 /mappe/ /mappe/3. Ubevart query string
Feil:
# Query string går tapt
RewriteRule ^side$ /ny-side [R=301,L]
# /side?id=5 -> /ny-side (id tapt)Riktig:
# Behold query string
RewriteRule ^side$ /ny-side [R=301,L,QSA]
# /side?id=5 -> /ny-side?id=54. Motstridende regler
Feil:
# Sistnevnte regel vinner uansett
Redirect 301 /side /ny-side
RewriteRule ^side$ /annet-sted [R=301,L]Riktig:
# Konsolidér til én regel
Redirect 301 /side /ny-side
# Ikke ha duplikate reglerHusk: En godt planlagt omdirigeringsstrategi bevarer dine SEO-rangeringer og sikrer en sømløs brukeropplevelse under nettstedsmigreringer eller restrukturering.
WordPress-spesifikke .htaccess-optimaliseringer
Standard WordPress .htaccess-struktur
WordPress genererer en standard .htaccess-fil når du aktiverer vakre permalinks:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPressForståelse av direktivene:
RewriteEngine On: Aktiverer rewrite-motorenRewriteBase /: Setter base-URL for alle omskrivinger[L]: Siste flagg - stopp behandling av flere regler
Legge til egendefinerte regler uten å ødelegge WordPress
Plasser egendefinerte regler før WordPress-reglene:
# BEGIN Egendefinerte regler
Redirect 301 /gammel-side /ny-side
# END Egendefinerte regler
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPressWordPress Multisite-konfigurasjon
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# Legg til trailing slash til /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]Sikkerhetsregler for .htaccess
Blokkere tilgang til sensitive filer
# Blokker tilgang til wp-config.php
<files wp-config.php>
order allow,deny
deny from all
</files>
# Blokker tilgang til .htaccess selv
<files ^\.htaccess>
order allow,deny
deny from all
</files>
# Blokker mappevisning
Options -Indexes
# Blokker tilgang til XML-RPC
<Files xmlrpc.php>
Require all denied
</Files>IP-basert tilgangskontroll
# Begrens admin-tilgang til spesifikke IP-er
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} ^(.*)?wp-admin(.*)? [OR]
RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)?
RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.100$
RewriteRule .* https://%{HTTP_HOST}/ [R=301,L]
</IfModule>Ytelsesoptimalisering med .htaccess
Nettleserbuffering
# Browser Caching (Expires-headers)
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
</IfModule>
# GZIP-komprimering
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
</IfModule>Avanserte teknikker
Betingede omdirigeringer basert på enhet
# Omdiriger mobilbrukere
RewriteCond %{HTTP_USER_AGENT} (android|bb\d+|meego)|mobile|up\.browser|tablet [NC]
RewriteRule ^(.*)$ https://mobil.dittdomene.no/$1 [R=301,L]Hotlink-beskyttelse
# Forhindre hotlinking av bilder
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^https://(www\.)?dittdomene.no [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp)$ - [F]Tvinge nedlasting av spesifikke filtyper
# Tving nedlasting av PDF-er
<FilesMatch "\.pdf$">
Header set Content-Disposition attachment
</FilesMatch>Vanlige spørsmål
Når skal jeg bruke Redirect vs RewriteRule?
- Bruk
Redirect 301for enkle, eksakte URL-kamper - Bruk
RewriteRulefor komplekse mønsterkamper
Hvordan teste omdirigeringer før permanent endring?
# Test med 302 først
RewriteRule ^gammel-side$ /ny-side [R=302,L]
# Når bekreftet, endre til 301
RewriteRule ^gammel-side$ /ny-side [R=301,L]Hva forårsaker “500 Internal Server Error”?
- Syntaksfeil
- Ugyldige regex-mønstre
- Motstridende regler som skaper løkker
Eksterne ressurser:







