Lær at implementere URL Rewriting

Tutorial serie part 1

Denne tutorial er første i serien.

Del to kan læses her Tutorial: Lær at undgå duplicate content og lær at bruge canonical urls

 

 

Hvad er en pæn URL

En pæn url er når du bogstaveligt talt fjerner alt i URL adressen som en besøgende eller en søgemaskine ikke kan bruge til noget.

 

Eksempelvis:

blog.php?id=1

Kan laves om til blog/post/1

De besøgende og søgemaskinerne er ligeglade med hvilken filtype og hvilke parametre der er i URL’en.

Du skal bare huske at URL’en skal være unik på den ene eller anden måde fordi hvis flere blog posts bruger samme pæne URL så ved den besøgende ikke hvilken blog posts han ser på og ligeledes ved søgemaskinen heller ikke hvilken blog posts den ser på og så har det den absolut modsatte effekt.

I den her tutorial vil jeg tage højde for hvordan man implementerer pæne og SEO venlige URL’s når man linker til en blog post.

Den normale URL for at linke til en blog post i vores tilfælde er blog.php?id=ID

Når jeg skriver ID hentyder jeg til det tal som bruges til at fortælle vores blog hvilken post vi kigger på, altså blog.php?id=1 eller 2 eller 3 osv.

 

 

Hvordan fungerer URL Rewriting

Hvordan fungere URL rewriting

Der er mange som tror inklusiv mig selv at når man besøger eksempelvis blog.php?id=ID så vil .htaccess gå ind og skrive linket om i URL baren, det troede jeg på i rimelig lang tid fordi de guides jeg læste på emnet sagde også

Ugly url rewrites to pretty url

Eksempel: blog.php?id=ID omkrives til blog/post/ID

Den måde det bliver sagt på tror man nemlig at man går ind på den grimme URL og så bliver den omskrevet til en pæn url, men det er fuldkommen omvendt.

Når du skal implementere pæne URL’s på dit website skal du til at lave alle interne links om, dvs. I vores eksempel skal vi de steder vi internt linker til blog.php?id=ID laves om til blog/post/ID/blog-post-titel

Når de besøgende klikker sig rundt på din side og bruger de pæne URL’s så vil serveren se i .htaccess filen om der er en match for den pæne URL og hvis der er en match så fortæller vi også via vores .htaccess hvor at den match skal finde den rigtige fil og vise den til den besøgende.

Hvis der ikke er nogen match? Så får den besøgende en fejl 404.

 

Apache .htaccess

I roden på din hjemmeside skal du have en fil der hedder .htaccess, ikke .htaccess.txt eller .php, en fil uden filtype som skal hedde .htaccess

Du kan lave den med notesblok bare husk at når du gemmer så skal du ændre filtype til “Alle filer” ellers vil notesblok automatisk sætte .txt bagpå og det skal vi ikke have.

Når du har lavet din .htaccess starter du med at skrive

RewriteEngine on

Når du har gjort dette kan vi gå videre og planlægge hvordan vi gerne vil have vores URL struktur til at se ud.

 

 

Planlægning af URL struktur

Pt. ser vores blogpost link ud som følgende eksempel

blog.php?id=1

Vores formål er at gøre det så SEO og brugervenligt som overhovedet muligt.

Så hvis vi fjerner filtype: blog?id=1 og fjerner vores parameter keys men beholder value så bliver det til blog1

Vi har nu det væsentlige tilbage og vi ved at det er en blog så nu kan vi bygge vores pæne url.

Vi vil gerne have der er en skråstreg imellem de forskellige values så det ikke bare er en lang køre, ekempelvis forestil dig hvis mine blog indlæg så sådan her ud blogpost1blogPostTitel det er ikke særligt pænt, men med skråstreg ser mine blog indlæg sådan her ud.

blog/post/1/blog-post-titel

Det syntes jeg selv ser pænest ud men du bestemmer selv hvordan dine URL’s skal se ud bare du bygger din htaccess rigtigt op.

Vi vil gerne fortælle den besøgende at det er en blog post, så det jeg selv har gjort er at skrive blog/post og så skal vi fortælle hvilken post som bliver set på blog/post/ID.

Vi kunne godt nøjes med blog/post/ID men hvis vi også tager blog postens titel med i URL’en det giver godt i brugervenlighed fordi den besøgende kan se hvad det handler om inden den besøgende besøger linket og søgemaskiner er glade for keywords i URL’en.

Et godt tip er at lave æøå om til ae oe og aa når det gælder URL’s, man kan godt bruge æøå men det er en god ide at holde URL’s internationalt fordi hvis folk fra andre lande skal se linket og de ikke lige har det tegnsæt som inkludere æøå så vises æøå højst sansynligvis som nogle firkanter. Man kan argumentere for at ens side kun er dansk men jeg syntes stadig URL’en skal forblive international. Ligeledes foretrækker jeg at hvis man tager blog postens titel med i URL’en så laver man mellemrum om til – eller _

Vi er kommet frem til at vi gerne vil have blog postenes URL ser således ud

blog/post/ID/blog-post-titel

Så nu kan vi begynde at bygge vores .htaccess fil

 

 

Opbygning af .htaccess

Så kommer vi endelig til den sjove del 🙂

Vi linker til blog posts med blog/post/ID/blog-post-titel

De skal henvise til blog.php?id=ID

Jeg starter med at vise koden og forklare den bagefter

Åben .htaccess filen og skriv følgende nedenunder RewriteEngine on

RewriteRule ^blog/post/([0-9]+)?/.*$ blog.php?id=$1 [L,NC]
  1. Vi starter med at fortælle vi vil lave en ny RewriteRule
  2. ^ er et regular expression udtryk for at fortælle vi er ved starten af en string
  3. blog/post/ Som er en del af vores pæne URL
  4. ([0-9]+) Her er hvor vi ville have vores ID som skal fortælle vores blog hvilken post vi ser på, med denne regular expression gør vi RewriteRule’en dynamisk, vi skulle gerne acceptere alle blog posts automatisk. Denne regular expression acceptere alt imellem 0 og 9 og + betyder der kan være flere tal, så alt lige fra 0 til et uendeligt tal er acceptabelt.
  5. ? igen noget regular expression, denne fortæller at det næste stykke er godtageligt men ikke en nødvendighed, dvs. folk både kan besøge blog/post/ID og blog/post/ID/blog-post-titel
  6. / Fordi der skal være en skåstreg “. punktum” er et regular expression som betyder den acceptere ethvert tegn fordi vi ved aldrig med sikkerhed hvilke tegn vi har i vores blog post titel, “* gange” regular expression for at det foregående altså “. punktum” kan ske så mange gange som nødvendigt, så vi både kan have korte og lange titler uden at bekymre os om længden.
  7. $ regular expression, vores string er færdig.

Dette er vores match, hver gang den fanger en match så vil den fortælle serveren at det er filen fra blog.php?id=$1 som skal vises.

$1 er en variabel “nej ikke php” som indeholder value’en fra ([0-9]+)

Du kan sagtens have flere variabler $1 $2 $3 osv. men du skal bare huske at lave dem i din match og variablernes tal kommer i samme rækkefølge som de er i din match.

Jeg har også sat nogle flags på, [L,NC] det er to flags

L – Hvis denne match er matched så skal Apache ikke prøve at matche andre RewriteRule’s

NC – No Case og betyder at den ikke er case sensitive

 

 

Husk

Dine interne links skal være de pæne links.

Fang dem via en match i .htaccess og henvis til den rigtige fil.

.htaccess har intet filnavn eller filtype men hedder bare .htaccess

Alligevel vi har lavet en match for blog/post/ID/blog-post-titel så kan folk stadig godt komme ind på blog posten hvis de besøger blog.php?id=ID og det er også meningen, men vi bruger de pæne URL’s når vi skal linke.

Eksempel: Det var først her fornylig jeg implementerede pæne URL’s på min side og søgemaskiner havde indekset en del af mine blog posts med URL som blog.php?id=ID så besøgende kan stadig godt se blog posten hvis de følger det link men når vi nu bruger de nye pæne URL’s så vil søgemaskiner stille og roligt opdatere deres resultater med de nye pæne URL’s plus jeg har brugt noget som hedder canonical URL og det forklare jeg om i næste blog post.

 

 

Her til sidst

Hvis du har problemer med .htaccess eller hvordan det fungerer kan du kontakte mig på twitter “Kim_cv” eller på email under menu punktet Kontakt

Min næste blog post vil handle om hvordan man kan bruge canonical URL’s til at undgå duplicate content

Del to kan læses her Tutorial: Lær at undgå duplicate content og lær at bruge canonical urls

Tak for denne gang