Få styr på ens domæne

December 11, 2009 · Posted in Udvikling · 2 Comments 

De fleste har både example.com og www.example.com, og de to domæner viser samme site, men det giver tit nogle problemer.

For mit vedkommende har jeg typisk en konstant der hedder URL der indeholder “http://www.example.com”, og så bruger jeg den hver gang jeg linker til undersider. Går man ind på example.com og logger direkte ind fra forsiden, vil man blive sendt til www.example.com der sætter en cookie og sender en tilbage til siden man kom fra. Problemet er bare at www.example.com ikke altid sætter cookies for *.example.com. Hvilket resulterer i at man ikke bliver logget ind.

Der kan være andre problemer. Måske har man *.example.com og nogen ved et uheld kommer til at linke til ww.example.com, og Google indekserer den side. Så har man lige pludselig tre kopier af sit site liggende i Google.

Løsningen er følgende i ens .htaccess:

1
2
3
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteRule ^(.*) http://www.example.com/$1 [L,R=301]

Jeg kontrollerer domænenavnet om det er www.example.com. Hvis ikke, så sender jeg videre til www.example.com. Jeg ta’r selvfølgelig hele URL’en med i videresendingen.

“If-sætninger” i Apaches mod_rewrite

December 11, 2009 · Posted in Udvikling · 2 Comments 

Når jeg udvikler gør jeg det typisk på min egen maskine, og så via SVN synkroniserer jeg med live-serveren. Det gi’r tit nogle problemer med rewrite-regler, da de typisk vil være anderledes fra localhost til den endelige server.

Min løsning på det er Skip-flaget der fortæller Apache hvor mange regler den skal springe over.

Nedenstående eksempel springer én regel over hvis man sidder på localhost.

1
2
3
4
5
6
7
8
9
10
11
12
RewriteEngine on
 
RewriteCond %{HTTP_HOST} ^localhost$
RewriteRule .* - [S=1]
 
# Bliver ikke kørt på localhost
RewriteCond %{HTTP_HOST} !^www\.example\.com$
RewriteRule ^(.*) http://www.example.com/$1 [L,R=301]
 
# Bliver kørt på alle sites
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^[^/]+-([0-9]+)$ item/view/$1 [QSA]

Se mere i manualen for mod_rewrite.

Underdomæner på en smart måde

January 14, 2009 · Posted in Udvikling · 2 Comments 

En nem måde at lave underdomæner på er ved at have wildcard-DNS. Dette opnår man typisk ved at lave et CNAME hvor *.foo.dk peget på hoveddomænet foo.dk.

Når folk ser foo.dk eller www.foo.dk leverer serveren typisk index.php; men forestil jer, at man vil have serveren til at vise domain.php med ‘bar‘ som argument, hvis brugeren fx kalder bar.foo.dk.

Det kan forholdsvist nemt løses vha. følgende i ens .htaccess.

1
2
3
4
RewriteEngine On
RewriteCond  %{HTTP_HOST}  !^(www\.)?foo\.dk$
RewriteRule  .*            %{HTTP_HOST}             [C]
RewriteRule  ^([^.]+)      domain.php?host=$1       [L]

Jeg omskriver kun hvis HTTP_HOST ikke er foo.dk eller www.foo.dk, og jeg omskriver http://bar.foo.dk/ til http://bar.foo.dk/bar.foo.dk for derefter at pille underdomænet ud, og vise domain.php?host=bar.

Bemærk at omskrivningen sker internt, så adresselinien ændrer sig ikke.

Det burde derefter være trivielt at lave nogle checks i domain.php$_GET['host'].

Tricket i ovenstående ligger i at kæde de to rewrite-regler sammen vha. [C] der står for chain.


  • Om websmed.dk

    Jeg hedder Morten, og jeg har udviklet webapplikationer siden slutningen af 90'erne.

    Jeg vil her dele ud af min erfaring, og med jævne mellemrum poste nogle tips og tricks, samt løsningsforslag på generelle dagligdags problemstillinger.

    Jeg har en forkærlighed for PHP og MySQL, hvorfor I nok vil se flest indlæg der vedrører den gren af webudvikling.

    Jeg har en anden blog af mere personlig karakter på mbn.dk, hvor I kan finde kontaktmuligheder m.m.

    Mine indlæg vil tit være baseret på problemstillinger i mit daglige virke, eller i mit eget firma MRLYTICS, hvor jeg sælger kundeundersøgelser samt kundedatabaser.

    Denne side er hostet hos slicehost.

  • Skrevet på Twitter