Htaccess-beveiligde mappen
Regelmatig maak ik gebruik van .htaccess om mappen met een wachtwoord te beveiligen. Het doel is om bots buiten de deur te houden, en om een eenvoudige privacy-gerelateerde drempel op te werpen. Dit artikel is beperkt tot deze use case.
Hoe het werkt
Bepaal pad naar .htpasswd-bestand
Alle wachtwoorden worden in één .htpasswd-bestand opgeslagen. Op mijn VPS is het pad:
/home/accountnaam/public
Bepaal loginnaam & wachtwoord
Meestal eenvoudige dingen zoals:
project-kippen-witten project-kippen-witten
Genereer hash
Ga naar http://www.tools.dynamicdrive.com/password/ en vul in:
- Gebruikersnaam & wachtwoord → Zie hierboven
- Pad naar .htpasswd-file → Zie hierboven
- File names to protect → Overslaan
Vervolgens wordt een .htaccess en een .htpasswd-bestand gegenereerd.
Voeg wachtwoord toe aan .htpassword
Als er al een .htpasswd-bestand
is: De gegenereerde regel toevoegen. Anders een nieuw bestand aanmaken met die ene regel als inhoud (zie elders voor details).
.htaccess-bestand aanmaken
Het gegenereerde .htaccess-bestand werkt voor mij niet. Dit werkt wel:
AuthName "I am so glad that you are here" AuthType Basic AuthUserFile /home/accountnaam/public/.htpasswd require valid-user
.htaccess-bestand plaatsen
Dit bestand moet je plaatsen in de map die afgeschermd moet worden. Bv.:
~/accountnaam/domeinnaam/public
Test
Succes!
Hostconfiguratie-bestand moet correct zijn
In het bestand waarin je voor Apache een domeinnaam specificeert, moet toegestaan worden dat je middels .htaccess mappen beveiligd. Ik geloof dat het gaat om de regel Require all granted
:
<Directory /home/flup/public/example.com/public> AllowOverride All Require all granted RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] </Directory>
Pad naar .htpasswd achterhalen
Het kan in het begin een lastig puzzeltje zijn om het correcte pad te specificeren. Dat kan via PHP achter redelijk snel, bv. in een bestand PadTest.php met inhoud:
<?php phpinfo(); ?>
Het pad naar dit bestand staat vermeld in de sectie Apache environment
Casus aug. 2015: Waarom werkt 't niet?
Het lijkt alsof het .htaccess-bestand genegeerd wordt.