401 not authorized

Hoe maak ik mijn website password protected via .htaccess en apache?

Om te beginnen zijn er minstens twee bestanden nodig: een .htaccess en een .htpasswd (dat niet noodzakelijk .htpasswd hoeft te heten, maar dat laten we even buiten beschouwing).

In het .htaccess bestand staat het volgende:

  1. AuthUserFile /pad/naar/.htpasswd
  2. AuthGroupFile /dev/null
  3. AuthName EnterPassword
  4. AuthType Basic
  5. Require valid-user

Waarbij

  • /pad/naar/.htpasswd verwijst naar de locatie van uw .htpasswd bestand (dit is een absoluut path, en kan iets zijn zoals /opt/www/uwnaam/web/www.uwsite.be/.htpasswd)
  • valid-user om het even welke user (gebruiker) is die u hebt aangemaakt in dat .htpasswd bestand

Een .htpasswd bestand is –net zoals het .htaccess bestand– een eenvoudig tekstbestand, met daarin een gebruikersnaam en een (geëncrypteerd) paswoord. Voor de gebruiker ‘test’, met als paswoord ‘test’ bevat dat bestand één lijn met daarop test:aS8AbzZUiBZ6Y Om zo’n paswoord aan te maken bestaan overigens een aantal online tools. (Het is overigens best mogelijk dat uw hosting provider dat proces voor u geautomatiseerd heeft.)

Uploaden naar de root directory van uw website, en voilà, uw ganse site is paswoord beveiligd.

Nu komt the fun part™: wanneer iemand niet over de noodzakelijke credentials beschikt, komt die terecht op een weinigzeggende foutmeldingspagina: 401 not authorized (cfr Status Code Definitions). Via de apache ErrorDocument directive, kunnen we die foutmeldingspagina aanpassen.

Om een eigen 401 pagina aan te maken, voegen we een (zesde) lijn toe aan ons .htaccess bestand:

  1. AuthUserFile /pad/naar/.htpasswd
  2. AuthGroupFile /dev/null
  3. AuthName EnterPassword
  4. AuthType Basic
  5. Require valid-user
  6. ErrorDocument 401 /errordocs/401.htm

/errordocs is gewoon een subdirectory in onze webroot, die we ook kunnen bereiken via de browser: http://www.uwsite.be/errordocs/, of voor die 401 pagina: http://www.uwsite.be/errordocs/401.htm Die pagina is een eenvoudig HTML bestand, net zoals (waarschijnlijk) de andere pagina’s op uw site. Het zou er als volgt kunnen uitzien:

  1. <html>
  2. <head>
  3. <title>uwsite.be</title>
  4. </head>
  5. <body>
  6. <p><strong>sorry!</strong><br />
  7. <strong>you are not authorized to view this document</strong></p>
  8. </body>
  9. </html>

Edoch! U zal merken dat, wanneer u probeert toegang te verkrijgen tot de site zonder opgave van een correcte gebruikersnaam en het bijbehorende passwoord, u deze pagina niet te zien krijgt. Het probleem is als volgt: door in de webroot het .htaccess bestand te plaatsen, hebben wij de ganse site afgeschermd, dus ook de subdirectory /errordocs. Concreet betekent dit dat je, om http://www.uwsite.be/errordocs/401.htm te kunnen bekijken, net zo goed een paswoord moet ingeven als voor de rest van de site. Niet echt nuttig.

De oplossing is eenvoudig. Binnen de subdirectory /errordocs plaatsen we gewoon een nieuw .htaccess bestand, met daarin slechts één lijn:

  1. Satisfy Any

Ziedaar: basic password protection in vier bestandjes: .htpasswd, .htaccess, /errordocs/.htaccess en /errordocs/401.htm. Hopelijk bent u er iets mee.