Auteur: M. van Ginkel Versie: 1.0 Datum: april 2010
.httaccess Je bent vast wel eens een zogenaamde "404 error page" tegengekomen. Dit wordt ook wel een "page not found" fout genoemd. Meestal krijg je dan een standaard wit scherm te zien met daarop in zwarte letters "De pagina kan niet gevonden worden." Wat deed je zelf in zo'n geval? Probeerde je alsnog de juiste pagina te achterhalen door naar de hoofdpagina van de site te gaan of druk je meteen op de back (vorige) knop van je browser? Het blijkt dat een hoop mensen zo'n site meteen verlaten. Dat is natuurlijk zonde van de bezoekers die je op die manier kwijtraakt. Gelukkig valt daar wat aan te doen, namelijk het maken van je eigen Error Pages met behulp van een .htaccess bestand. Zo'n speciaal gemaakte foutpagina staat een stuk professioneler dan de standaard foutmelding en je bezoekers zullen dat waarderen.
De 404 Foutmelding Pagina Maken Aan de 404 foutmelding zelf valt niks te doen, het bestand kan immers niet gevonden worden. Je kunt natuurlijk proberen te voorkomen dat er kapotte links naar je site wijzen, maar dat is weer een heel ander verhaal. Feit is in ieder geval dat er een foutmelding getoond zal worden als een pagina niet gevonden kan worden. Je kunt wel de standaard pagina voor deze foutmelding er wat fraaier uit laten zien en je kunt er wat nuttige informatie en links opzetten voor de bezoeker die de foutmelding te zien krijgt. Dat leer je in dit artikel. We gaan nu eerst de foutpagina zelf maken. Dit is de pagina die getoond zal worden in plaats van de standaard 404 foutmelding. Deze pagina is een gewone pagina, net als iedere andere pagina van je site. Je maakt dus gewoon een .html bestand en je zet daar een mededeling op voor je bezoekers. Bijvoorbeeld:"Helaas, de Pagina die u zocht kon niet gevonden worden." Vervolgens kun je wat informatie geven over waar de pagina wel zou kunnen staan. Bijvoorbeeld: "Controleer a.u.b. deze informatie: Alle adressen van pagina's op onze site eindigen op .html . Controleer of de pagina waarnaar u op zoek was ook eindigt op .html. .httaccess / Wat kan je ermee / © M. van Ginkel / ICT academie Leiden
2
Onze bestandsnamen zijn verder altijd geschreven met kleine letters en nooit met hoofdletters. Wellicht kunt u de pagina vinden door het adres aan de hand van deze informatie aan te passen." Daarna is het handig om de mensen die de URL toch niet kunnen vinden door te sturen naar een aantal veel bezochte pagina's op je site. Maak daarvoor hyperlinks naar deze pagina's. Dus bijvoorbeeld: "Kon u de pagina niet vinden met behulp van bovenstaande informatie? Misschien zocht u één van deze veelbezochte pagina's van onze site: Allerlei artikelen voor webmasters [Hieronder plaats je andere links naar belangrijke pagina's]" Tenslotte plaats je onderaan een link terug naar de hoofdpagina van je website en als het kan ook een zoekformulier waarmee bezoekers je site kunnen doorzoeken naar de informatie die ze zochten. Zie voor dit laatste onze pagina met gratis zoekmachines voor je site. Bijvoorbeeld: "U kunt ook naar onze homepage gaan om daar te zoeken naar de juiste pagina." [Hier plaats je een link naar de hoofdpagina van je site] "Verder kunt u door middel van onderstaand formulier onze site doorzoeken. Vul daarvoor relevante trefwoorden in." [Hier plaats je dan het zoekformulier] Natuurlijk kun je de pagina volledig naar eigen smaak aanpassen. Geef het het liefst een achtergrondkleur die overeenstemt met de rest van je site. Ook kun je er plaatjes op gebruiken en er een uitgebreid navigatiesysteem op zetten, zodat de bezoekers nog makkelijker kunnen vinden wat ze zochten. Belangrijk is in ieder geval dat je de tekst op de foutpagina duidelijk en kort houdt. Veel mensen weten niet zo veel van surfen op het web en foutmeldingen en ook zij moeten hun weg kunnen vinden naar de informatie die ze zoeken via jouw zelfgemaakte foutpagina. Als je je foutpagina af hebt dan kun je hem opslaan met bijvoorbeeld de bestandsnaam 404.html. Daarna moet je hem uploaden naar je webserver. Je zou het bestand bijvoorbeeld in de directory "errors" kunnen plaatsen. Als je trouwens voorbeelden wilt zien van foutpagina's dan kan je eens naar een bekende site als CNN.com of Yahoo.com gaan en daar een URL intypen die niet bestaat, bijvoorbeeld: http://www.cnn.com/bla.html . .httaccess / Wat kan je ermee / © M. van Ginkel / ICT academie Leiden
3
Het .htaccess Bestand Maken Nu je de foutpagina zelf gemaakt hebt, wordt het tijd om het .htaccess bestand te maken. Dit bestand kan op verschillende manieren gemaakt worden, afhankelijk van de webserver waar je site op draait. Het onderstaande verhaal geldt in ieder geval voor de veelgebruikte Apache webserver. Open in je HTML Editor een nieuw tekstbestand (.txt) . Zet daarin onderstaande code: ErrorDocument 404 /errors/404.html
Nu verwijs je naar het bestand 404.html dat je in de directory errors hebt geplaatst. Heb je een andere bestandsnaam en/of directory gekozen, pas dan deze code aan aan de door jou gekozen namen. Sla nu het bestand op en upload het naar de rootdirectory van je site. De rootdirectory is bijvoorbeeld http://www.jouwnaam.nl/. Nu komt er iets heel belangrijks. Je hebt het bestand namelijk geupload als .txt bestand. Het .htaccess bestand moet echter niet .htaccess.txt heten, maar alleen .htaccess! Het is dus een bestand zonder een extensie. Je moet nu de bestandsnaam aanpassen met behulp van je FTP programma. Met Leech FTP doe je dat bijvoorbeeld door op de rechtermuisknop te klikken en dan voor "rename file/dir" te kiezen. Dan verwijder je .txt achter .htaccess en klik je op Ok. Nu is je .htaccess bestand klaar.
Je Error Pagina's Testen Als het goed is moeten je zelfgemaakte error pages nu werken. Je kunt dit testen door een foute URL in te typen. Dus bijv. www.jouwdomein.nl/blabla.html . Als het goed is dan verschijnt nu de door jezelf gemaakte foutpagina.
Andere Error Pagina's Maken Met het bovenstaande kun je je eigen 404 error pagina's maken. Op dezelfde manier kun je allerlei andere error pagina's maken voor andere foutmeldingen. Je moet dan dus een apart bestand maken voor de foutmelding die je wilt .httaccess / Wat kan je ermee / © M. van Ginkel / ICT academie Leiden
4
laten zien en je moet een regel toevoegen aan de .htaccess file met de nieuwe code(s). Hieronder zie je een lijst met allerlei foutcodes die herkend worden door Apache servers en waarvoor je aparte error pagina's zou kunnen maken: • • • • • • • • • • • • • • • • • • • • • • •
302 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 500 501 502 503 504 505
-
Redirect Bad Request Authorization Required Payment Required Forbidden File Not Found Method Not Allowed Not Acceptable Proxy Authentication Required Request Time-out Conflict Gone Length Required Precondition Failed Request Entity Too Large Request-URI Too Large Unsupported Media Type Internal Server Error Method Not Implemented Bad Gateway Service Temporarily Unavailable Gateway Time-out HTTP Version Not Supported
Als je dus bijvoorbeeld een foutpagina zou willen maken voor de errorcode 500 (Internal Server Error), dan maak je de foutpagina op dezelfde manier als je de 404 pagina maakte, alleen sla je hem nu op met een andere bestandsnaam, bijvoorbeeld 500.html. Dit bestand upload je weer naar je server. Daarna pas je het .htaccess bestand aan en voeg je deze code toe: ErrorDocument 500 /errors/500.html
Dit doe je vervolgens voor alle foutmeldingen waarvoor je een eigen foutpagina wilt maken.
Andere Servers Bij het maken van de error pagina's in dit artikel ging ik er van uit dat je website draait op een Apache webserver. Als je site op een andere server staat, dan kan je eens op deze pagina .httaccess / Wat kan je ermee / © M. van Ginkel / ICT academie Leiden
5
kijken voor een korte uitleg over hoe je error pages maakt op bijvoorbeeld Microsoft IIS, Lotus Domino en vele andere webservers.
2. Beveiligen van directories met .htaccess en .htpasswd Soms heb je als webmaster bepaalde delen op je site die je niet voor iedereen toegankelijk wilt maken. De Apache webserver en andere webservers bieden mogelijkheden om directories te beveiligen. Toegang wordt dan alleen nog verleend aan diegenen die een geldige gebruikersnaam en wachtwoord kunnen invoeren. Een bezoeker krijgt dan het volgende venster te zien wanneer hij de beveiligde directory bezoekt:
Waarschijnlijk kom je ook wel eens zulke vensters tegen als je op het web aan het surfen bent. In dit artikel leer je hoe je zelf een directorie kunt afsluiten met behulp van .htaccess en .htpasswd. Dit hele artikel gaat er trouwens van uit dat je een Apache server hebt! Eerst nog een paar zaken die je moet weten voordat je begint.
Kanttekeningen en Benodigdheden Kanttekeningen: • •
Niets is ooit 100% veilig. Er kunnen altijd veiligheidsproblemen optreden. De gebruikersnaam en het wachtwoord worden verstuurd als gewone tekst. Ze zijn dus niet versleuteld.
.httaccess / Wat kan je ermee / © M. van Ginkel / ICT academie Leiden
6
Benodigdheden: • • •
Telnet of SSH-toegang tot de webserver! Een teksteditor Een FTP programma
De directory aanmaken De eerste stap die je moet nemen, is het aanmaken van de directory die je wilt beveiligen. Als je al eerder een directory hebt gemaakt die je wilt beveiligen dan kun je deze stap overslaan. Je kunt een directory aanmaken vanuit Telnet, maar voor het gemak kun je het ook nog gewoon met je FTP programma doen. Maak dus nu de nieuwe directory die je wilt gaan beveiligen. In de rest van dit artikel noem ik deze directory beveiligd. In de codes hieronder moet je deze naam dus vervangen door de naam die je aan je eigen directory hebt gegeven.
Het .htaccess bestand maken De tweede stap is om het .htaccess bestand te maken. Je kunt dit ook weer vanuit Telnet doen met een programma als Pico of VI, maar hier bespreek ik hoe je dit met een gewone teksteditor op je eigen systeem kunt doen. Open dus in je favoriete teksteditor een nieuw tekstbestand (.txt) Kopieer en plak daarin de volgende code: AuthUserFile /usr/www/beveiligd/.htpasswd AuthGroupFile /dev/null AuthName "Geheime Pagina" AuthType Basic
require valid-user In de code hierboven moet je nog twee dingen aanpassen: 1. Bij AuthUserFile moet je het pad naar de directory die je wilt beveiligen invullen. Als je niet weet wat het pad precies is dan kun je dat meestal nagaan via je FTP programma of door op de site van je webhost te kijken. 2. Waar ik hierboven Geheime Pagina heb getypt, moet je de titel invullen die je aan het wachtwoord-venster wilt geven. Bezoekers krijgen deze titel dan te zien (zie ook het plaatje hierboven). .httaccess / Wat kan je ermee / © M. van Ginkel / ICT academie Leiden
7
Als je dit gedaan hebt dan moet je het .htaccess bestand uploaden naar de directory die je wilt beveiligen. Plaats het dus niet in de hoofddirectory van je site, anders wordt je hele site beveiligd en kan geen enkele bezoeker er meer inkomen zonder gebruikersnaam en wachtwoord. Nu moet je alleen het .htaccess bestand nog even hernoemen. Meestal kan dat door het bestand in je FTP programma te selecteren en dan op de rechtermuisknop te klikken. Kies dan voor een optie als Rename file of iets dergelijks. Verander dan .htaccess.txt in .htaccess, dus zonder een extensie!
Het .htpasswd bestand maken Nu het .htaccess bestand op zijn plaats staat, is het tijd om het .htpasswd bestand te gaan maken. Om dat te kunnen doen moet je Telnet of SSH-toegang tot je webserver hebben. Je kunt gebruik maken van Telnet via de functie "uitvoeren" in Windows. Dit vind je onder de Start-knop. Type in het volgende venster: telnet www.jedomeinnaam.nl. Vervolgens moet je de gebruikersnaam en het wachtwoord die je van je webhost hebt gekregen invoeren. Voor meer informatie over Telnet kun je het beste even op de site van je webhost kijken. Het kan zijn dat het gebruik van Telnet niet is toegestaan door je webhost, maar dat je wel via Secure Shell (SSH) de server mag benaderen. In dat geval moet je een geschikte client downloaden. Ik kan je aanraden om Putty te gebruiken (gratis). Het is verder niet moeilijk om verbinding te maken met de server. Het meeste wijst zich vanzelf. Als er nog onduidelijkheden zijn dan kun je het beste de documentatie op de site van Putty bekijken of weer bij je webhost kijken of informeren. Goed, ik ga ervan uit dat je nu verbinding met de server hebt gemaakt via Telnet of SSH. Doorloop nu de volgende stappen om het .htpasswd bestand te maken. 1. Kijk eerst waar je bent. Type daarvoor het commando pwd en druk op enter. Als je al in de directory zit die je wilt beveiligen dan kun je door naar de volgende stap. Anders moet je eerst naar deze directory toe gaan. Dat doe je door cd beveiligd te typen. Natuurlijk vervang je "beveiligd" weer door de naam die je eerder aan de te beveiligen directory hebt gegeven. 2. Nu je in de te beveiligen directory zit, moet je het volgende commando typen (alleen de eerste keer!) om het .htpasswd aan te maken: htpasswd -c .htpasswd gebruikersnaam .httaccess / Wat kan je ermee / © M. van Ginkel / ICT academie Leiden
8
("gebruikernaam" moet je vervangen door de gebruikersnaam die je toegang wilt geven tot de beveiligde directory). 3. Vervolgens zal de server je vragen om een password op te geven voor deze gebruiker. Vul daar dus een wachtwoord in. Je moet dit vervolgens nog een keer bevestigen. 4. Als je nieuwe gebruikers toe wilt voegen die ook toegang tot de directory moeten krijgen dan moet je het volgende commando gebruiken: htpasswd .htpasswd nieuwe_gebruikersnaam
Tot slot Dat was het! Nu kun je eenvoudig directories beveiligen en nieuwe gebruikers toevoegen. Als je het .htaccess bestand op een gegeven moment weer wilt verwijderen dan kan dat door vanuit telnet/SSH rm .htaccess te typen. Je kunt dit trouwens ook weer makkelijk via je FTP programma doen.
3. Tegengaan van linken en afbeeldingen Als je veel mooie plaatjes en foto's op je site hebt staan dan zul je op een gegeven moment te maken krijgen met webmasters die je plaatjes gaan stelen. Dat stelen gebeurt op twee manieren: 1. De webmaster slaat het plaatje eerst vanaf je site op en zet het vervolgens op zijn eigen server. 2. De webmaster plaatst een
-tag waarmee het plaatje vanaf jouw server geladen wordt. Tegen de eerste methode valt niet zo veel te doen. Je kunt bijvoorbeeld wel de rechtermuisknop uitschakelen, maar ik heb al eens eerder uitgelegd dat dit een slecht idee is. Tegen de tweede methode kun je gelukkig wel wat ondernemen. Het is verder ook niet moeilijk. Het werkt via Mod Rewrite en een .htaccess bestand. Hoe dit alles precies in zijn werk gaat leg ik in de rest van dit artikel uit. Je webhost moet wel Mod Rewrite geïnstalleerd hebben om gebruik te kunnen maken van de codes hieronder!! Vraag dit desnoods na bij je webhost. Eerst een korte uitleg over waarom je iets tegen het direct linken naar jouw plaatjes door andere webmasters zou willen doen. .httaccess / Wat kan je ermee / © M. van Ginkel / ICT academie Leiden
9
Waarom direct linken tegengaan? De eerste reden waarom je tegen het direct linken naar plaatjes en andere bestanden op je server zou willen optreden, heb ik al even genoemd: deze webmasters stelen namelijk je plaatjes. Het is niet toegestaan om andermans plaatjes zomaar op je eigen site te gebruiken zonder voorafgaande toestemming van de webmaster. Doe je dat wel dan schend je het auteursrecht. Ik heb zelf nauwelijks grafische elementen op mijn websites staan, maar ik zie wel vaak prachtige websites van anderen met hele originele clipart en foto's. Ik kan me goed voorstellen dat zij niet willen dat anderen direct naar deze plaatjes linken. Iedereen wil namelijk een goede site aanbieden met unieke inhoud. De tweede reden is dat het direct linken naar jouw plaatjes je geld kan kosten. Je site genereert namelijk extra dataverkeer doordat iedere keer de plaatjes vanaf andere pagina's opgevraagd worden. Aangezien de plaatjes op jouw webserver staan, komt dit dataverkeer voor jouw rekening. Het kan zo zijn dat dit extra dataverkeer ervoor zorgt dat je boven de limiet van je webhost uitkomt. Je zult dan moeten bijbetalen. Je betaalt in dat geval dus voor de plaatjes op een ander zijn site!
De oplossing via Mod Rewrite en .htaccess De code die ik hieronder noem zal niet altijd werken, maar wel voor veel gevallen. Het vereist dat de browser de referrer doorgeeft. Dat is de pagina waarvandaan het plaatje opgevraagd wordt. De meeste browsers zullen dit inderdaad doen. Je kunt op dezelfde manier andere bestanden beschermen, zoals: midi- of andere geluidsbestanden, zip-bestanden en video-bestanden.
De code Eerst maak je het .htaccess bestand. Dit is een gewoon tekstbestand dat je straks opslaat als .htaccess.txt. Nadat je het bestand hebt geupload, moet je de bestandsnaam veranderen in .htaccess, dus zonder een extensie! In dit tekstbestand plaats je de volgende code: RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?domeinnaam.nl/.*$ [NC] RewriteRule \.(gif|jpg)$ - [F]
.httaccess / Wat kan je ermee / © M. van Ginkel / ICT academie Leiden
10
Deze code zorgt ervoor dat er niet meer direct naar gifs en jp(e)g's gelinkt kan worden. Als een andere site het toch probeert, dan verschijnt er het bekende vakje met het rode kruisje in beeld om aan te geven dat het plaatje niet weergegeven kan worden (in Internet Explorer tenminste). Natuurlijk moet je nog wel even 'domeinnaam.nl' in de code hierboven vervangen door de URL van je eigen site. Tenslotte moet je het bestand nog uploaden naar de directory waar de plaatjes staan. Je kunt meer extensies toevoegen door deze te scheiden door het | teken. Je kunt deze maken door | in je code te typen. Als je dus naast gifs en jpg's bijvoorbeerld ook midi en png-bestanden wilt toevoegen dan wordt de laatste regel als volgt: RewriteRule \.(gif|jpg|mid|png)$ - [F] De oplossing hierboven kun je de 'nette' oplossing noemen. Er is namelijk ook een wat gemenere manier. Je kunt er namelijk voor zorgen dat in plaats van het opgevraagde plaatje een ander plaatje verschijnt. Op dat plaatje kan je bijvoorbeeld een tekst zetten als "Direct linken niet toegestaan!", of iets dergelijks. Als je al zoiets doet, houd het dan wel fatsoenlijk. Je kunt, met een beetje fantasie, plaatjes gebruiken die veel genanter zijn voor de betreffende webmaster, maar dan verlaag je je tot zijn niveau. Ok, de code die je in dat geval moet gebruiken, is als volgt: RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?domeinnaam.nl/.*$ [NC] RewriteRule \.(gif|jpg)$ http://www.domeinnaam.nl/plaatje.gif [R,L]
Tot Slot Je hebt gelezen hoe je het direct linken van plaatjes kunt tegengaan. Ook heb ik geprobeerd duidelijk te maken dat het eigenlijk onmogelijk is om je plaatjes echt te beschermen. Er is namelijk niet veel te doen tegen het opslaan van plaatjes vanaf je website. Wel kan je er met de oplossing in dit artikel voor zorgen dat je niet hoeft te betalen voor het dataverkeer van je plaatjes op een ander zijn site. Vooral webmasters van websites die veel grafische elementen bevatten, moeten het direct linken van anderen scherp in de gaten houden en optreden als het uit de hand dreigt te lopen. Dat kan een hoge rekening van je webhost voorkomen.
.httaccess / Wat kan je ermee / © M. van Ginkel / ICT academie Leiden
11
4. Redirects maken Iedere webmaster verandert wel eens de structuur van zijn site. Bij het groeien van de inhoud op een site is het bijna onvermijdelijk dat bepaalde pagina's of directories van locatie veranderen. Als je wilt dat je bezoekers de nieuwe locatie van de pagina's makkelijk kunnen vinden dan zul je een redirect moeten gebruiken. Zo'n redirect kun je op verschillende manieren maken. Twee manieren hebben we al eens eerder behandeld, namelijk de meta-refresh redirect, de eenvoudigste manier, en de JavaScript redirect. In dit artikel gaan we een andere manier van redirecten behandelen: de redirect via het .htaccess-bestand. N.B. Ik ga er in de rest van dit artikel van uit dat je site op een Apache webserver draait! Voordat je leert hoe je de redirect met .htaccess kunt maken, lees je eerst waarom dit de meest effectieve manier van redirecten is.
Waarom redirecten via .htaccess? Een redirect via het .htaccess-bestand is om twee redenen de meest effectieve manier van redirecten: 1. Het is een server-side redirect. Daardoor zal de redirect bij alle browsers en andere user-agents (bijvoorbeeld spiders van zoekmachines) werken. Dit in tegenstelling tot client-side redirects, zoals bijvoorbeeld via JavaScript. 2. Het is via .htaccess veel eenvoudiger om redirects te maken voor grote hoeveelheden pagina's en complete directories. Het bespaart dus tijd.
De code Open je .htaccess bestand, of maak dit bestand aan. Als je niet (meer) precies weet hoe je dit bestand maakt, lees dan nog even ons eerdere artikel: Eigen error pages maken (onder het kopje "Het .htaccess bestand maken"). Plaats de volgende code in het .htaccess-bestand: Redirect /directorynaam http://www.domeinnaam.nl/nieuwedirectorynaam
.httaccess / Wat kan je ermee / © M. van Ginkel / ICT academie Leiden
12
Verander "directorynaam" in de code in de naam van de directory die je hebt verplaatst en "nieuwedirectorynaam" in de nieuwe naam van die directory. Nu moet je alleen het .htaccess-bestand nog uploaden. Alle aanvragen voor http://www.domeinnaam/directorynaam/ zullen nu worden doorgestuurd naar http://www.domeinnaam.nl/nieuwedirectorynaam/ . Dus: als iemand het bestand http://www.domeinnaam.nl/directorynaam/bestand.html
nu automatisch doorgestuurd naar
opvraagt, dan wordt hij
http://www.domeinnaam.nl/nieuwedirectorynaam/bestand.html.
Je ziet dat dit erg handig is. Je hoeft nu maar één regeltje aan je .htaccess-bestand toe te voegen om alle aanvragen voor pagina's in een oude directory naar de nieuwe locatie door te sturen. Bij een "metarefresh"-redirect zou je een code in alle pagina's moeten opnemen! Natuurlijk kun je op dezelfde manier ook redirects maken voor individuele pagina's.
Status codes Tot slot nog iets over de verschillende status codes. Je kunt via status commando's bepaalde HTTP status codes laten terugsturen door de webserver. Als je geen aparte status code opgeeft dan zal de redirect worden aangemerkt als "temporary" (tijdelijk) (HTTP status 302). Door de commando's krijgen browsers en andere user agents meer informatie over welk soort redirect het hier betreft. Dit zijn de belangrijkste status commando's: permanent Een permanente redirect code wordt teruggestuurd (301) om aan te geven dat de opgevraagde pagina/directory permanent is verplaatst. temp Een tijdelijke redirect status wordt teruggestuurd (302). Dit is de standaardinstelling. seeother Een "See Other" status wordt teruggestuurd (303) om aan te geven dat de opgevraagde pagina/directory is vervangen. gone Een "Gone" status wordt teruggestuurd (410). Hiermee wordt aangegeven dat de pagina/directory verwijderd is. Je moet nu geen
.httaccess / Wat kan je ermee / © M. van Ginkel / ICT academie Leiden
13
URL opgeven in het .htaccess-bestand. Het bestand/de directory bestaat immers niet meer. Een paar voorbeelden hoe de code in het .htaccess-bestand wordt bij deze status commando's: Permanente redirect: Redirect permanent /directorynaam http://www.domeinnaam.nl/nieuwedirectorynaam See Other status: Redirect 303 /directorynaam http://www.domeinnaam.nl/nieuwedirectorynaam Gone status: Redirect gone /directorynaam Je ziet, je kunt in plaats van de commando's (permanent, seeother, etc.) ook de status codes gebruiken (301, 302, etc.) in de code. Veel succes met het maken van je eigen redirects! Door te werken met .htaccess kun je in ieder geval een hoop tijd besparen.
5. Bezoekers weren ! Soms is het handig om bepaalde bezoekers van je site te weren. Dat kan bijvoorbeeld iemand zijn die op je website zit te spammen, of misschien wil je een bepaalde robot van een zoekmachine niet op je site hebben. Een oplossing voor dit probleem is het blokkeren van een IP-adres met behulp van .htaccess.
Over IP-adressen Een IP-adres is een 32-bit nummer dat toegewezen wordt aan computers die verbonden zijn met het internet. Het IP-nummer bestaat uit vier velden die gescheiden worden door punten. Een voorbeeld van een IP-adres is dus: 128.155.7.18. Via het IP-adres is het mogelijk om informatie over een bezoeker te achterhalen. Je kunt bijvoorbeeld zien vanuit welk land hij inbelt.
Stap 1: het IP-adres achterhalen Voordat je een bepaalde bezoeker kun verbannen of een robot kunt tegenhouden, zul je het IP-adres moeten achterhalen. Dat kan door .httaccess / Wat kan je ermee / © M. van Ginkel / ICT academie Leiden
14
het analyseren van de logfiles van je website. Als je bepaalde webtools gebruikt, zoals een gastenboek of een forum, dan kan je daar vaak ook het IP-adres zien van degene die een bericht geschreven heeft.
Stap 2: het .htaccess bestand maken Als je het IP-nummer hebt achterhaald dan kun je vervolgens het .htaccess bestand maken. Als je niet (meer) weet wat een .htaccess bestand precies is dan raad ik je aan om dit artikel op MijnHomepage eens door te lezen. De code die je aan het .htaccess bestand moet toevoegen is: order allow,deny deny from 120.56.7.8 allow from all Nu wordt de bezoeker met het IP-adres 120.56.7.8 van je site geweerd. Hij krijgt een foutmelding te zien als hij op de website probeert te komen. Als je meerdere IP-adressen wilt blokkeren dan plaats je deze elke keer op een nieuwe regel: order allow,deny deny from 120.56.7.8 deny from 124.5.66.12 deny from 64.40.10.1 allow from all Je kunt ook een hele IP-block/range blokkeren. Je kunt dat bijvoorbeeld doen als een bepaalde bezoeker via een proxy server verbinding maakt met het internet en hierdoor telkens een ander IPadres heeft wanneer een nieuwe verbinding gemaakt wordt (123.45.6.7, 123.45.6.8, etcetera). De code: order allow,deny deny from 120.0.0 allow from all Door het blokkeren van de complete IP-range worden nu alle bezoekers met een IP-adres van 120.0.0.0 tot en met 120.0.0.255 tegengehouden.
.httaccess / Wat kan je ermee / © M. van Ginkel / ICT academie Leiden
15
LET OP: door het blokkeren van een hele IP-range kan je ook "onschuldige" bezoekers buitensluiten! Wees dus heel voorzichtig met het gebruik hiervan. In plaats van numerieke addressen kun je ook domeinnamen en subdomeinen gebruiken: order allow,deny deny from domeinnaam.nl allow from all Nu worden alle bezoekers die met het web verbonden zijn via het domein "domeinnaam.nl" van je site geweerd.
6. Standaardpagina’s van directories wijzigen
In dit artikel leer je hoe je met behulp van een .htaccess bestand de standaardpagina van een directory kunt veranderen. Met standaardpagina bedoel ik de pagina waar je automatisch op terecht komt wanneer je een bepaalde directory bezoekt. In de meeste gevallen zal de standaardpagina index.html, index.php of iets dergelijks zijn. Het is heel makkelijk om http://www.jesite.nl/index.html te vervangen door http://www.jesite.nl/jouwnaam.html.
De code Zet de volgende code in het .htaccess bestand: DirectoryIndex bestandsnaam.html Natuurlijk vervang je bestandsnaam.html door de naam van de pagina die je als standaardpagina wilt gaan gebruiken. Vervolgens moet je het .htaccess bestand uploaden naar de directory waarvan je de standaardpagina wilt wijzigen. Je zult nu zien dat wanneer je de directory bezoekt je direct terechtkomt op de door jou opgegeven pagina. Je kunt in plaats van een .html pagina natuurlijk ook een ander bestandstype als directory index kiezen. Zo kun je bijvoorbeeld een .php bestand of zelfs een script kiezen als de standaardpagina.
.httaccess / Wat kan je ermee / © M. van Ginkel / ICT academie Leiden
16
Een andere handige mogelijkheid is het opgeven van meerdere bestandsnamen in de code van het .htaccess bestand. Bijvoorbeeld: DirectoryIndex bestandsnaam.html index.php index.cgi pagina.htm Als je deze code in je .htaccess bestand plaatst en je bezoekt dan www.jesitenaam.nl dan zal de server eerst proberen bestandsnaam.html te openen. Als deze pagina niet bestaat dan zal hij gaan zoeken naar index.php, als die ook niet bestaat dan probeert hij index.cgi op te vragen en lukt dat ook niet, dan zal tenslotte pagina.htm opgeroepen worden. De server gaat dus alle mogelijkheden af die in het .htaccess bestand genoemd worden. Dit is een handige optie voor websites met veel directories en veel verschillende directory structuren.
7. Kiezen voor www of zonder www in URL Een heleboel pagina's van websites zijn te bereiken via een URL als http://www.domeinnaam.nl/pagina.html. Veel andere sites kiezen er juist voor om hun pagina's zonder de www. weer te geven. Een URL wordt dan bijvoorbeeld http://domeinnaam.nl/pagina.html. Dit maakt de URL een stukje korter. Met .htaccess kun je eenvoudig bepalen of de pagina's op een site met www bereikt worden of zonder www. In dit artikel zie je hoe dit moet.
Waarom een keuze maken? Je kunt je afvragen waarom je een keuze zou moeten maken tussen www.domeinnaam.nl en domeinnaam.nl. Dit heeft te maken met de manier waarop zoekmachines je site zien. Google ziet http://www.domeinnaam.nl/index.html en http://domeinnaam.nl/index.html namelijk als twee verschillende pagina's. Dat is onwenselijk, omdat op de www-versie precies dezelfde inhoud staat als op de niet-www versie. Een zoekmachine kan dit zien als duplicate content. De content op de pagina's is niet uniek en je site kan hiervoor bestraft worden door een zoekmachine. Een ander probleem bij het laten bestaan van een www-versie en een niet-www versie is dat andere sites gaan linken naar beide versies. Sommigen kiezen ervoor om een link te plaatsen naar www.domeinnaam.nl en anderen die zonder www op je site zijn gekomen, zullen de URL zonder www gebruiken. Zulke links van andere sites zijn .httaccess / Wat kan je ermee / © M. van Ginkel / ICT academie Leiden
17
belangrijk voor de ranking van je pagina in de zoekresultaten van een zoekmachine. Ook daarom is het aan te raden om een keuze te maken voor één van beide opties.
www of niet? Of je voor www kiest of voor niet-www maakt op zich niet veel uit. Als je geen www gebruikt heb je als voordeel dat je URL wat korter wordt. Misschien zijn je bezoekers echter gewend om www te gebruiken en is het duidelijker dat het om een webadres gaat als je wel www gebruikt.
De .htaccess code Als je al je pagina's zonder www wilt tonen dan gebruik je de volgende code in je .htaccess bestand: RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} !^domeinnaam.nl$ [NC] RewriteRule ^(.*)$ http://domeinnaam.nl/$1 [L,R=301]
Als iemand nu een pagina probeert te bereiken door www.domeinnaam.nl/pagina.html te typen dan wordt hij automatisch doorgestuurd (redirect) naar http://domeinnaam.nl/pagina.html. Wil je je pagina's met www tonen, gebruik dan de volgende code: RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} !^www.domeinnaam.nl$ [NC] RewriteRule ^(.*)$ http://www.domeinnaam.nl/$1 [L,R=301]
Als nu iemand domeinnaam.nl/pagina.html typt dan volgt er een automatische redirect naar www.domeinnaam.nl/pagina.html.
8. HTML bestand parsen als PHP bestand Hier ga ik uitleggen hoe je een .htm(l) bestand kunt laten parsen als een .php bestand. Je kan je natuurlijk afvragen waarom je dit überhaupt ooit zou willen doen. Daarom eerst een stukje vooraf. Onlangs heb ik deze oplossing gebruikt bij een site die ik beheer en die ik een paar jaar geleden opgebouwd heb in HTML-pagina's. De site was qua opbouw erg verouderd met nogal wat fouten in de markup en had structurele problemen, zoals het gebruik van tabellen voor het maken van de layout van de website. Een tabel is daar namelijk niet bedoeld. Een .httaccess / Wat kan je ermee / © M. van Ginkel / ICT academie Leiden
18
tabel moet je gebruiken om informatie in onder te brengen en te ordenen, niet als middel om een webpagina structuur te geven. Naast de fouten en slordigheden werd het updaten van de site steeds omslachtiger, omdat bij het toevoegen van één nieuw menu-item aan de site alle pagina's moesten worden veranderd. Ik vond het daarom tijd om een geheel vernieuwde versie van de site te maken. Ik had meer ervaring opgedaan de laatste jaren en wist dat ik nu een betere site kon maken. Een site die zou voldoen aan de webstandaarden, die hierdoor lichtere pagina's zou hebben en dus sneller zou laden en daarbij een site die veel makkelijker te updaten zou zijn door het gebruik van PHP-includes. Met includes kon bijvoorbeeld het menu van de hele site aangepast worden door één bestand te veranderen en te uploaden in plaats van alle pagina's. Toen ontstond er een probleem. Ik wilde PHP gaan gebruiken, maar alle pagina's van de site stonden in de zoekmachines als .html bestanden en ook andere sites linkten naar deze bestanden. Als ik nu .php extensies ging gebruiken voor de bestanden dan zouden alle URL's in de zoekmachine en op de andere sites dode links gaan opleveren. De site verkocht producten op het web en de links moesten daarom intact blijven om geen klanten te verliezen. Aanvankelijk wilde ik dit oplossen door een redirect te gebruiken. Als er naar een .html bestand gevraagd zou worden dan zou de server automatisch redirecten naar de .php versie. Ik wilde deze oplossing ook gaan gebruiken tot ik bij mijn zoektocht een nog beter alternatief tegenkwam. Als ik de .html bestanden nou kon laten lezen als .php bestanden door de server? In dat geval zou ik niet hoeven te redirecten en zou ik zelfs de extensies van alle bestanden op de site niet hoeven te veranderen. Toch zou ik op deze manier gebruik kunnen maken van PHP. Voor mij bleek dit uiteindelijk de ideale oplossing voor de site.
De oplossing met .htaccess Het laten parsen als .php bestand van een .html pagina doe je met een .htaccess code. Dit is de code die ik heb gebruikt: AddType application/x-httpd-php .php .htm .html Deze code moet je dus toevoegen aan het .htaccess bestand van je site. Als je nog nooit van een .htaccess bestand hebt gehoord dan kan je het beste even een eerder artikel lezen (onder het kopje "Het .htaccess Bestand Maken").
.httaccess / Wat kan je ermee / © M. van Ginkel / ICT academie Leiden
19
De bovenstaande code geeft de Apache webserver de instructie om naast bestanden met de .php extensie ook .htm en .html bestanden te laten parsen door de PHP parser op de server. Om te controleren of het heeft gewerkt kun je een simpel HTML bestand aanmaken met daarin een eenvoudige PHP opdracht:
Php test Dit bestand moet je dan even opslaan en uploaden naar de server en hem tenslotte openen in je browser. Als het goed is komt er nu "Hallo, dit is een test." op het scherm te staan. Gebeurt dit niet dan wordt je .html pagina nog niet geparsed door de PHP parser. Dit komt waarschijnlijk doordat je webhost geen .htaccess ondersteunt of omdat je host dit voor jouw account (nog) niet heeft ingeschakeld. Dit laatste was bij mij aanvankelijk ook het geval. Na een e-mailtje mocht ik gewoon .htaccess gebruiken en werkte het wel. Vraag dit dus even na bij je host mocht bovenstaande code niet werken. Toen het bij mij werkte kon ik alle oude .html bestanden aanpassen naar de nieuwe versie van de site. Hierin verwerkte ik ook PHP-includes, zodat het updaten van menu's en dergelijke in het vervolg veel eenvoudiger werd. De site is nu een stuk beter geworden, qua opbouw, markup en laadsnelheid. De .htaccess oplossing heeft ervoor gezorgd dat de omschakeling minder tijd heeft gekost en dat er geen klanten verloren zijn gegaan.
Samenvattend De .htaccess code kan erg handig zijn bij een overstap van .html naar .php bestanden op een website. Het voorkomt dat je een hoop extensies moet aanpassen en je hoeft bezoekers niet te redirecten van de HTML bestanden naar de PHP bestanden. Zoekmachinelinks en links vanaf andere sites blijven intact en je verliest dus geen bezoekers. Al met al was het voor de site waar ik aan werkte de beste oplossing. Hopelijk kan het ook jullie eens van pas komen. .* bronnen mijnhomepage.nl / apache.org / wikipedia .httaccess / Wat kan je ermee / © M. van Ginkel / ICT academie Leiden
20