I denna lilla guide tänkte jag ta upp gundläggande kunskaper inom regex med hjälp av en hel del exempel. Dessa exempel brukar användas flitigt och är ofta bara att kopiera till ditt eget behov.
Inledning
Regex, reguljära uttryck, är ett sätt att uttrycka ett mönster. Man använder den oftast genom att testa om en textsträng passar i ett visst mönster.
.htaccess är en instruktionsfil till Apache. Apache är den vanligaste webbservern på en linuxdator. Om man använder windows så finns det något liknande men denna guide tar bara upp det vanliga (och användbara).
301-redirect är en HTTP-svarskod som säger till webbläsaren och google "Den här sidan har permanent flyttat till en annan plats. " En redirect behövs då man tar bort gamla urler, till exempel vid en större uppgradering av en webbplats.
Regex - Grunder
Regex ser jättesvåra ut men de är ganska lätta och skriva om man har förstått grunderna. Här nedan är de olika byggstenarna:
(Punkt) . : vad som helst
(Astrix) * : noll, en eller flera
(Plus) + : en eller flera
(Frågetecken) ? : noll eller en
(Pipe) | : alternering
(Parentes) (text) : gruppering
(Hakparentes) [text] : alternering
(Tak) ^ : negering
(Tak) ^ : start på sträng
(Dollartecken) $ : slut på sträng
(Dollartecken) $1 : den första grupperingen/variablen
(Backslash) \ : används för att skydda tecken, tillexempel för att visa att en punk ska vara punkt och inte vad som helst
Det som kan vara lite svårt att förstå utan tydliga exempel är hakparenteserna och variabler.
Kod:Regexet a[cb]a matchar aba och aca men inte acba eller abcaKälla: Googlehemsida (här finns också lite exempel)Kod:Om regexet start(.*)slut körs mot strängen "startTobiasslut" så kommer variablen $1 att innehålla "Tobias"
.htaccess
Nu när vi har ett litet hum om regex så kan vi börja med användbara exempel. Dessa exempel kan du skriva in i din .htaccess fil. .htaccess filen ligger vanligtvis i din webbsidas rootkatalog. (Den kan också ligga i en mapp, men då kontrollerar den bara den mappen och dess undermappar). Innan man skriver dessa exempel måste dessa rader stå i .htaccess:
Exempel 1 - Redirect från non-www till wwwKod:RewriteEngine On #starta motorn RewriteBase / #vart ska man utgå ifrån, om din webbsida ligger i en undermapp så kanske detta ska ändras...
Rad1: Om domänen börjar med "exempel.se" (no-case)Kod:#Redirect from non-www to www RewriteCond %{HTTP_HOST} ^exempel\.se [NC] RewriteRule (.*) http://www.exempel.se/$1 [R=301,L]
Rad2: Så spara allt som står efter domänen i en variabel $1 och Redirecta (301) till http://www.exempel.se/$1 (sluta behandla fler regler)
Exempel 2 - Redirect från www till non-www
Rad1: Om domänen börjar med "www.exempel.se" (no-case)Kod:#Redirect from www to non-www RewriteCond %{HTTP_HOST} ^www\.exempel\.se [NC] RewriteRule (.*) http://exempel.se/$1 [R=301,L]
Rad2: Så spara allt som står efter domänen i en variabel $1 och Redirecta (301) till http://exempel.se/$1 (sluta behandla fler regler)
Exempel 3 - Redirect från "vilken subdomän som helst" till www
Rad1: Om domänen inte börjar med "www.exempel.se" (no-case)Kod:RewriteCond %{HTTP_HOST} !^www\.exempel\.se [NC] RewriteRule (.*) http://www.exempel.se/$1 [R=301,L]
Rad2: Så spara allt som står efter domänen i en variabel $1 och Redirecta (301) till http://exempel.se/$1 (sluta behandla fler regler)
Exempel 4 - Byt namn på en fil
Rad1: Om urlen inte går till en riktig filKod:# Rewrite robots.txt to robots.php: RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule robots\.txt robots.php [L]
Rad2: Om urlen inte går till en riktig mapp
Rad3: Så om det efter domänen är robots.txt så läs in filen robots.php (sluta behandla fler regler)
Detta är inte en redirect. Detta är en instruktion till webbserven att den ska läsa in robots.php när besökaren vill ha robots.txt.
Exempel 5 - Byt namn på en fil, allmänt
Rad1: Om urlen inte går till en riktig filKod:RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*)\.htm$ $1.php [L]
Rad2: Om urlen inte går till en riktig mapp
Rad3: Så om det efter domänen är något.htm så läs in filen något.php (sluta behandla fler regler)
Exempel 6 - Ta bort filändelser
Rad1: Om urlen inte går till en riktig filKod:RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*)\.php /$1 [R=301,L]
Rad2: Om urlen inte går till en riktig mapp
Rad3: Så om det efter domänen är något.php så redirect till /något (sluta behandla fler regler)
Edit: Sen måste man med PHP-script se till att rätt sida visas.
Exempel 7 - Egna felsidor
Rad1: Om sidan inte kan hittas, ladda filen error404.phpKod:# Customized server error messages: ErrorDocument 404 /error404.php ErrorDocument 403 /error403.php
Rad2 Om sidan är förbjuden, ladda filen error403.php
Exempel 8 - Enkel redirect
Rad1: Gör en 301 redirect från gamal-url.html till /en/ny-urlKod:Redirect 301 /gamal-url.html /en/ny-url
Detta kallar jag för en enkel redirect för att här kan man inte använda regex.
Exempel 9 - Redirect en gammal mapp till en ny, allmänt
Rad1: Om urlen inte går till en riktig filKod:RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule gammal/mapp/(.*)$ /nytt/$1 [R=301,L]
Rad2: Om urlen inte går till en riktig mapp
Rad3: Så om det efter domänen börjar med sökvägen gammal/mapp/(sen vad som helst) så redirecta (301) till /nytt/(samma vad som helst) (sluta behandla fler regler)
OBS. Detta gäller inte om man går in på www.exampel.se/gammal/mapp. (Studera regexet). Om man vill att även detta sista specialfall ska fångas upp av regeln. Byt ut rad 3 mot denna rad:
Kod:RewriteRule gammal/mapp/?(/.*)?$ /nytt/$1 [R=301,L]
Exempel 10 - Redirect en gammal domän till en ny
Rad1: Spara allt som står efter den gamla domänen i en variabel $1 och Redirecta (301) till http://www.nydoman.se/$1 (sluta behandla fler regler)Kod:RewriteRule (.*) http://www.nydoman.se/$1 [R=301,L]
Detta bör göras om en webbplats byter domän. Denna rad placeras i .htaccess-filen på den gamla domänen.
OBS. Denna rad är den samma som i exempel 1-3. Skillnaden är att det inte finns något villkor framför regeln.
Exempel 11 - Redirect med query string
Om man ska göra en redirect från en sida med query strings så bör man använda rewrite cond och %{QUERY_STRING}. Varken RewriteRule, Redirect eller RewriteMatch läser query strings.Kod:RewriteCond %{REQUEST_URI} ^/index\.php$ RewriteCond %{QUERY_STRING} ^id=([0-9]*)&category=bananer$ RewriteRule ^(.*)$ http://www.anotherdomain.site/page/newpage [R=301,L]
Exempel 12 - Redirect till HTTPS (SSL)
Rad1: Om det är port 80, DVS httpKod:RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
Rad2: Redirecta till https://www.example.com
Denna regel kan läggas till efter dina befintliga regler för att kräva att HTTPS-protokollet används.
Fotnot
Alla exempel är inte testkörda i skrivande stund. Kommentera eller PMa om du märker att det är något problem med något exempel så ska jag redigera detta inlägg.
Fler exempel kommer att läggas till vart efter jag ser att det behövs.




Svara med citat