@codenerd på twitter Mit seneste tweet:

Med eller uden WWW med mod_rewrite – tag beslutningen og undgå problemer

Fik en mail her til aften om hvordan jeg redirecter http://martin-nielsen.com til WWW udgave, svaret kommer her.

Mange websites svarer i dag både på http://www.domæne.dk og http://domæne.dk – dette er selvfølgelig også godt nok fra et brugersynspunkt – brugeren kommer ind lige gyldigt hvad. Set fra dit synspunkt kan der dog være problemer rent SEO mæssigt.

Derfor er det vigtigt at tage stilling til om dit domæne skal virke med eller uden WWW og derefter 301 redirecte modparten til det rigtige. Dette kan vi nemt gøre på Apache webserveren med mod_rewrite:

Med WWW

PHP
1
2
3
4
5
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www.domæne.dk$ [NC]
RewriteRule ^(.*)$ http://www.domæne.dk/$1 [R=301,L]

Her sender vi alt som ikke starter med www videre til www.domæne.dk/osv/osv

Uden WWW

PHP
1
2
3
4
5
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.domæne.dk$ [NC]
RewriteRule ^(.*)$ http://domæne.dk/$1 [R=301,L]

Her sender vi alt som starter med www videre til domæne.dk/osv/osv

Ønsker du ikke at tvinge WWW og Har du DNS sat op således at dit domæne svarer på alt foran domænenavnet (stjerne alias) – vil det være en god ide at redirecte alt som ikke starter med domænenavn.dk, da du ellers kan få en masse problemer med duplicate content:

PHP
1
2
3
4
5
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^domæne.dk$ [NC]
RewriteRule ^(.*)$ http://domæne.dk/$1 [R=301,L]

Her på sitet har jeg valgt at tvinge brugen af WWW, selvom det teknisk set er dybt forkert at bruge WWW, idet alt foran domænenavnet anses som værende et subdomæne. Grunden til dette er, at langt de fleste mennesker tror WWW er krævet, og vil fx til enhver tid linke til dit website med WWW, også selvom du har gjort dit for at tvinge siden til at køre uden WWW.

Håber dette lille tip kan hjælpe.

15 kommentarer

  1. Skrevet af Jacob W  d. 04/12/2009 kl 18:19

    Super lækkert lavet, Martin!

    Jeg har implementeret det på en blog jeg er ved at bygge og det virker perfekt, men kun på forsiden :)

    Hvis man f.eks. går ind på http://jacobworsoe.dk så bliver man redirected til http://www.jacobworsoe.dk.

    Men hvis man går ind på en underside, f.eks: http://jacobworsoe.dk/overskrift-til-indlaegget-12/ så bliver man redirected til: http://www.jacobworsoe.dk/post.php/?id=12

    Jeg bruger mod_rewrite til at lave pæne url’s med. Kan det laves, så den også kan redirecte undersiderne?

    Min .htaccess ser således ud:

    
    RewriteEngine on
    RewriteBase /
    RewriteRule ([0-9]*)/$ post.php?id=$1
    
    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTP_HOST} !^www\.jacobworsoe\.dk$ [NC]
    RewriteRule ^(.*)$ http://www.jacobworsoe.dk/$1 [R=301,L]
    

    Svar på kommentaren
  2. Så lidt glad for at kunne hjælpe – og beklager det sene svar, notifikationen var blevet slugt af mit spamfilter :-)

    Du kan forresten godt samle de to RewriteEngine On under en så du har det hele samlet og ikke behøver ha forskellige RewriteBase osv, så er det bare altid en god ide at slutte med [L] (last rule)

    Og forresten, din blog er røget i favoritterne, glædeligt med nye blogge omkring split tests – kan man aldrig få nok af!

    Svar på kommentaren
  3. Ah nej ikke som exit(),
    det var faktisk præcis som du har gjort jeg mente :-)

    [L] indikerer bare at det er den sidste der skal udføres udfra fx de rewriteconds du har, dvs her rewriter den først til www – og først efter rewriten rewriter den så igen, uden L vil den kalde udføre alle rewriterules som passer på det nuværende request

    Svar på kommentaren

Leave a Reply to Martin Nielsen Cancel reply

Krævede felter er markeret med *.

*