Redirect wildcard-subdomæne med .htaccess

Jeg har længe irriteret mig over, at hvis man gik ind på min side svendk.dk, men indtastede noget andet end “www.” eller ingenting foran svendk.dk i adresselinjen (f.eks. foo.svendk.dk) så fik man vist min hostingudbyders hjemmeside (det er dog lavet om til cPanels fejl-side nu, lidt bedre, men stadig ikke helt godt nok).

Nu skulle det være, så jeg undersøgte hvordan og hvorledes, og jeg kom frem til, at der skulle flere ting til (til info har det dog taget længere tid at skrive denne artikel end at lave opsætningen, så bare klø på, det er ikke så svært) 

1. DNS-opsætning

Dit domæne skal have et såkaldt Canonical Name med et wildcard subdomæne, der peger mod webserveren, foruden den almindelige A-record, ellers sker der ikke meget. Du har det nok i forvejen, hvis du både kan nå dit website med og uden www. foran.

Spørg din udbyder, hvordan du opsætter dette.

A       example.com      192.168.1.1 (din servers ip-adresse) 

CNAME   *.example.com    example.com

Nu peger alt* fra dit domæne over på din webhosts server. Så langt så godt.

* Medmindre andre subdomæner er opsat, de gælder stadig.

2. Webhost-opsætning

Din webhost skal håndtere ikke bare example.com og www.example.com, men også *.example.com. De to første er normalt allerede opsat, og nu opsætter vi wildcard-subdomænet. Dette gøres således i cPanel:

Min webhost tilbyder cPanel som konfigurationssystem, hvilket er virkelig lækkert at arbejde med. Hvis din webhost ikke tilbyder cPanel, må du lige høre dem ad, hvordan du opsætter et wildcard-subdomæne.

Log ind på cPanel og vælg Subdomains:

  1. I feltet Subdomain skrives *
  2. I feltet Domain vælges det domæne, subdomænet skal gælde for (hvis du har flere domæner)
  3. I feltet Document Root indsættes mappen til selve filerne for dit website
  4. Klik på Create

Wildcard Subdomain Redirect_A_CreateSubdomain

Der mangler lidt en “mappevælger” til Document Root-feltet, men hvis du i en ny fane åbner linket til hovedsiden, kan du åbne File Manager og på den led finde den korrekte sti til dine website-filer. Feltet er dog lidt smart, da det viser muligheder, når du begynder at skrive.

Tip: Du kan åbne links i en ny fane ved enten at holde Control-knappen nede, når du klikker, eller klikke med midterknappen (typisk scroll-hjulet) på musen.

Wildcard Subdomain Redirect Subdomains

Nu er subdomænet oprettet, og alle subdomæner vil vise din webside. Det er også fint nok, men det har altså lidt en opdragende effekt, at dine brugeres indtastning bliver rettet til den URL, som du ønsker, dit website skal ligge på. Derudover må din side heller ikke kunne ses fra flere URL’er, eftersom Google vil straffe dig for Dublicate Content i søgeresultaterne.

Derfor opsætter vi et par linjer i din .htaccess-fil

3. .htaccess-opsætning

HT-hvafforenfisk? .htaccess. Det er en fil, som webserveren kigger i, for at se, hvordan du gerne vil have dit websted til at se ud, sådan teknisk set. Det ligger (langt) udenfor scope af denne artikel, men du kan jo søge på Google, hvis du vil vide mere. Du skal bare vide, at vi skal opsætte en regel for, at hvis en bruger kommer ind på websiden med et subdomæne, ja så bliver browseren viderestillet til dit website uden subdomæne på.

Vi skal ind og rette i .htaccess-filen, der ligger (eller skal ligge) i roden af dit websteds mappe. Hvis din webhost har cPanel, er det nemmeste at bruge File Managerens fil-editor, som du åbner ved at højreklikke på filen, men ellers kan du bare downloade filen via FTP, rette i den og uploade den igen. Hvis du ikke kan finde filen, så sørg for, at skjulte filer/”dot-filer” vises. I cPanel gøres det i indstillingerne for File Manager øverst til højre.

Hvis filen ikke findes kan du bare oprette en ny tekst-fil. Den skal bare hedde “.htaccess” (og ikke “htaccess” eller “htaccess.txt”).

Når du har fået åbnet filen, skal du indsætte følgende øverst i filen.

## BEGIN Custom SK
RewriteEngine On
RewriteCond %{HTTP_HOST} ^.+\.svendk\.dk$ [NC]
RewriteRule ^(.*)$ http://svendk.dk/$1 [L,R=301]
## END Custom SK

Kommentarerne først og sidst er smart at have med, så du ved, at det er dig, der har rettet det og hvor det starter og slutter. WordPress og andre kan nemlig også rette i filen, fx til WordPress’ Pretty Permalinks. Du kan bare rette det til dine initialer (SK er mine).

Jeg forklarer de tre linjer nederst i artiklen. Det er bestemt ikke nødvendigt, at du forstår præcis hvad de gør.

Nu skal du rette lidt i filen, og det er vigtigt, at du er nøjagtig. Alle tegnene er vigtige og betyder noget særligt (!).

  • I linjen med RewriteCond retter du “svendk\.dk” til “example\.com” (hvor du selvfølgelig indsætter dit eget domæne). Punktum betyder noget særligt og er derfor escaped med en omvendt skråstreg. Er dit domæne “foobar.dk” skal du altså indsætte “foobar\.dk”
  • I linjen med RewriteRule retter du “svendk.dk” til dit domæne. Her skal punktummet ikke escapes

Nu gemmer du filen og afprøver din nye rewrite i en browser. Når du tester det, skal du sørge for, at browseren har deaktiveret sin cache. Det er nemt i Chromes Developer Tools (F12), der er nemlig en checkbox på Network-fanebladet.

4. Det var det!

Nu har du wildcard subdomain viderestilling på din hjemmeside :-)


– Jamen, hvad nu hvis jeg har “www.” på den URL, hvor min webside ligger?

Ja, så skal ovenstående laves lidt om. Det er også lidt udenfor scope af artiklen, men bare pas på, at du ikke får lavet en regel, der gør, at hvis man skriver www.example.com, at man så bliver redirected til www.example.com – det giver et uendeligt loop og gør derfor din side utilgængelig. RegEx kan være temmelig langhåret. Til denne artikel fandt jeg via Google disse sider, der hjalp mig til at forstå, hvad linjerne gjorde, og hjalp mig frem til ovenstående resultat.


Og så lidt til supernørderne :-)

Herunder forklarer jeg de tre Rewrite-linjer i detaljer.

  1. linje aktiverer det modul, der kan lave det her rewrite-magi
  2. linje definerer en betingelse som, hvis sand, aktiverer reglen i den næste linje. Den består af tre parametre:
    1. parameter er teststrengen, her domæne/host-delen af URL’en (http://sub.subsub.svendk.dk/folder1/?q=fooBar), i det følgende kaldet hostnavnet.
    2. parameter er en RegEx, der leder efter en et bestemt mønster/pattern/match i teststrengen. RegEx’en “^.+\.svendk\.dk$” prøver jeg at forklare her:
      1. “^” betyder “matchet skal starte fra begyndelsen af strengen”, altså starten af hostnavnet
      2. “.+” er lidt mere kompleks. “.” betyder “ethvert tegn” og “+” betyder “ét eller flere tegn”. Kort sagt: “Enhver sekvens af mindst ét tegn”
      3. “\.” betyder punktum, bogstaveligt. Da “.” betyder “ethvert tegn” skal punktummet escapes med omvendt skråstreg
      4. “svendk” og “dk” er de exacte strenge
      5. “$” betyder “matchet skal slutte i slutningen af strengen”, altså i slutningen af hostnavnet
        Der kigges altså på, om hostnavnet passer med “*.svendk.dk” hvor * er et eller flere tegn
    3. parameter er flag. Flaget [NC] betyder Not Case sensitive, altså den er ligeglad med om brugeren skriver “example.com” eller “eXaMpLe.com”
  3. linje består af en RegEx og en substitute-streng og nogle flag. Mht. første linje, matcher den i følgende tekststreng: “URI’en uden protokol (http://), hostnavn og querystring (?q=foobar)” – dvs. evt. mappestruktur og filnavn
    1. parameter er en RegEx:
      1. “^” og “$” betyder ligesom før “i hele strengen”
      2. “.*” betyder “enhver karakter” med “nul eller flere karakterer”
      3. “(” og “)” grupperer matchet til senere brug
    2. parameter erstatter den teststreng, som RewriteCond brugte – altså hostnavnet. Dvs. i stedet for hostnavnet indsættes http://svendk.dk/”, og herefter indsættes hvad end der blev grupperet i RegEx’en. Altså, “http://foobar.svendk.dk/BarFoo/” bliver til “http://svendk.dk/BarFoo/”. Bemærk: Querystrings bliver ikke berørt og bliver altid sat i slutningen på URL’en.
    3. parameter er flagene, L betyder, at dette er sidste regel for denne condition, og R=301 betyder, at den redirecter med en HTTP-kode 301, hvilket betyder “Moved Permanently”. Således ved Google, at siden er flyttet og kan opdatere sit index, og hvis nogen har et link til din side, kan de se i deres statistik, at de har et link, der skal opdateres.

 

 

Jeg håber du kan bruge min artikel, og som altid er kommentarer velkomne :-)

Lad mig høre hvad du synes, skriv en kommentar: