Symbolische subdomeinen aanmaken met .htaccess

Subdomeinen kunnen een handig middel zijn om grote sites op te delen in relevante onderwerpen. Grote merken verbinden daarbij vaak diverse diensten aan een subdomein, denk aan klantenservice.hundomein.nl of tracking.hundomein.nl 

Buiten deze bovengenoemde domeinen zit niemand er tegenwoordig nog op te wachten om handmatig de instellingen voor een subdomein bij de hostingprovider in te geven. Zeker grote initiatieven als startpagina’s willen dat subdomeinen automatisch worden aangemaakt in de database.

.htaccess subdomeinen

In de root directory van je website kun je door middel van een aantal regels in het .htaccess bestand alle subdomeinen laten doorverwijzen naar bijvoorbeeld een gelijknamige map. Met andere woorden: jan.domein.nl wordt domein.nl/jan. Vervolgens kunt u ervoor kiezen om daadwerkelijk mappen aan te maken met deze namen of door een index te maken die waardes uit de database haalt op basis van de naam van het subdomein.

De onderstaande code kunt u gebruiken om alle subdomeinen door te verwijzen naar gelijknamige mappen op de website:

RewriteCond %{HTTP_HOST} ^([a-z]+)?(\.[a-z]+\.[a-z]+)$ [NC] RewriteCond %{HTTP_HOST} !^(www|ftp|mail)\uwdomein\.nl RewriteRule (.*) http://uwdomein.nl/%1 [R=301,L]

Alle directories laten afhandelen door de index?

Wilt u vervolgens dat de subdirectories worden doorverwezen naar 1 pagina die alles afhandeld, bijvoorbeeld de index? Dan plaatst u onderstaande code daar nog onder:

RewriteCond %{REQUEST_FILENAME} -f [NC,OR] RewriteCond %{REQUEST_FILENAME} -d [NC] RewriteRule ^(.*?)$ $1 [L] RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ index.php?one=$1&two=$2&three=$3 [L] RewriteRule ^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$ index.php?one=$1&two=$2 [L] RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?one=$1 [L] RewriteRule ^(.*)$ index.php

U kunt vervolgens in uw index.php file gebruik maken van de onderstaande code om te werken met de variabelen.

$one=$_GET[‘one’]
$two=$_GET[‘two’]
$three=$_GET[‘three’]

DNS Instellingen

Controleer de DNS instelling voor uw domeinnaam. In de DNS records staan de koppelingen van uw domeinnaam met de juiste IP adressen van de server. Bij het aanmaken van symbolische subdomeinen zoals hierboven beschreven is het belangrijk dat alle subdomeinen eerst worden opgevangen en doorgestuurd worden naar uw site. Dit doet u met een DNS Wildcard A record.

DNS Wildcard

Klinkt heel spannend, is het niet, een wildcard record is niks meer dan een * Dit teken in een DNS record staat voor “alles” en dat betekend dat wat je ook invoert voor je domeinnaam, altijd uw index wordt weergegeven, tenzij u natuurlijk bovenstaande verwijzing d.m.v. .htaccess heeft ingesteld.

Ga naar de pagina DNS instellingen in het klantenpaneel van uw webhosting, bijvoorbeeld Direct Admin of cPanel. Controleer of er reeds een A record is aangemaakt met * 

Wanneer dit al gedaan is kunt u de instellingen sluiten. Zo niet maak dan een nieuw A record aan en verwijs deze door naar hetzelfde IP adres als de verwijzing die bij www is ingegeven. U kunt tevens een AAA record aanmaken met wederom dezelfde gegevens als bij www alleen dan met * in plaats van www

De melding: Apache is functioning normally

Krijg je bovenstaande melding wanneer je een subdomein aanroept? Dan staat er dus iets niet op de juiste plaats en dat is in dit geval doorgaans het .htaccess bestand. Dit heb ik zelf doorgaans op kunnen lossen door het .htaccess bestand een folder(mapje) omhoog te plaatsen. Met andere woorden vóór de map met uw domeinnaam.  Bij veel shared host profiders heeft u een hele structuur voordat u daadwerkelijk in de rootfolder van uw domeinnaam bent aanbeland. Dat is super, want dan kunt u ook daar instellingen wijzigen of bestanden plaatsen.

Een voorbeeld: maak verbinding met via uw ftp client. U krijgt dan doorgaans zoiets als:

/domains/uwdomein.nl/plublic_html

Hierbij is public_html dan pas de map waar ook uw index.html / index.php file te vinden is. Krijgt u dus de melding Apache is functioning normally bij subdomeinen dan wordt het subddomein wel degelijk opgepakt en doorgestuurd, echter nog niet naar de juiste map. Zet de bovenstaande regels van het .htaccess bestand nu eens in een nieuw .htaccess bestand in de map ervoor, in dit geval uwdomein.nl. 

Geef een reactie