Naar de inhoud springen
Gratis tool

.htaccess-generator en htpasswd-generator

Met de .htaccess-generator maak je online een kant-en-klare .htaccess met onderdelen zoals 301-omleiding, HTTPS, wachtwoordbeveiliging, caching en compressie, plus een .htpasswd met bcrypt-hash. Voor example.com ontstaan bijvoorbeeld 301-regels die www.example.com en http omleiden naar https://example.com. Gratis, zonder registratie en direct in je browser.

Gebouwd door Dimitri Heissler

Werk je aan een eigen project? Host het op een VPS met volledige controle.

Optioneel. Alleen nodig voor de www-regel en hotlinkbescherming. Deze geldt dan uitsluitend voor dit domein.

Snelstart

Het voltooide bestand staat onder de bouwstenen. Direct naar de uitvoer

HTTPS en www

Dwingt HTTPS af en bepaalt of je adres met of zonder www wordt gebruikt.

Een uniforme schrijfwijze voorkomt dubbele inhoud bij zoekmachines. Vul hierboven je domein in, zodat de regel alleen daarvoor geldt.

  • Als je site achter Cloudflare, een loadbalancer of een reverse proxy draait, ziet Apache vaak alleen HTTP en blijft het eindeloos doorverwijzen (fout ERR_TOO_MANY_REDIRECTS). Schakel dan ‘Achter een proxy’ in.

Doorverwijzingen

Leidt oude adressen om naar nieuwe of verhuist het hele domein.

Wachtwoordbeveiliging

Beveiligt de pagina met een gebruikersnaam en wachtwoord, bijvoorbeeld een stagingversie.

IP-toegang

Staat alleen bepaalde IP-adressen toe of blokkeert afzonderlijke IP-adressen.

Foutpagina's

Toont aangepaste pagina's voor 404, 403, 500 en andere fouten.

Browsercaching

Bepaalt hoelang browsers afbeeldingen, stijlen en lettertypen bewaren.

Afbeeldingen en lettertypen veranderen zelden en kunnen lang in de cache blijven. Gebruik voor CSS en JavaScript alleen lange cachetijden als de bestandsnamen een versienummer bevatten.

Compressie

Comprimeert tekst met Brotli en GZIP, zodat deze kleiner is en sneller wordt overgedragen.

Alleen tekstformaten zoals HTML, CSS, JavaScript, JSON, XML en SVG worden gecomprimeerd. Afbeeldingen en video's zijn al gecomprimeerd en blijven ongewijzigd.

Voorkomt dat andere websites je afbeeldingen rechtstreeks insluiten.

Beveiliging

Schakelt directorylijsten uit en blokkeert verborgen bestanden en Backups.

  • Options -Indexes veroorzaakt bij sommige hosters een 500-fout als zij geen Options toestaan in .htaccess. Verwijder dan de regel of vraag support om AllowOverride Options.

Beveiligingsheaders

Stelt X-Frame-Options, nosniff, Referrer-Policy, Permissions-Policy en HSTS in.

Bepaalt of andere sites je pagina in een frame mogen insluiten.

  • De Permissions-Policy blokkeert de camera, microfoon en locatie voor de pagina. Heb je een van deze functies nodig, bijvoorbeeld voor videochat of kaarten, pas de regel dan aan.

PHP-waarden

Verhoogt de uploadlimiet, het geheugen en de uitvoeringstijd voor PHP.

Je bestanden

5 bouwstenen actief

# .htaccess gegenereerd met de .htaccess-generator van ZAP-Hosting
# Maak vóór het uploaden een reservekopie en test eerst in een testomgeving.

# HTTPS en domeinnotatie
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Algemeen en beveiliging
Options -Indexes
AddDefaultCharset UTF-8
ServerSignature Off
<IfModule mod_headers.c>
  Header always unset X-Powered-By
  Header unset X-Powered-By
</IfModule>
RewriteCond %{REQUEST_URI} !(^|/)\.well-known/ [NC]
RewriteRule (^|/)\. - [F]
<FilesMatch "\.(bak|sql|log|ini|swp|dist|orig|old|conf)$|~$">
  Require all denied
</FilesMatch>

# Beveiligingsheaders
<IfModule mod_headers.c>
  Header always set X-Content-Type-Options "nosniff"
  Header always set X-Frame-Options "SAMEORIGIN"
  Header always set Referrer-Policy "strict-origin-when-cross-origin"
  Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
</IfModule>

# Compressie
<IfModule mod_brotli.c>
  AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/css text/xml text/javascript application/javascript application/json application/ld+json application/xml application/xhtml+xml application/rss+xml application/atom+xml image/svg+xml image/x-icon font/ttf font/otf application/vnd.ms-fontobject
</IfModule>

<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript application/javascript application/json application/ld+json application/xml application/xhtml+xml application/rss+xml application/atom+xml image/svg+xml image/x-icon font/ttf font/otf application/vnd.ms-fontobject
</IfModule>

# Browsercaching
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/jpeg "access plus 1 month"
  ExpiresByType image/png "access plus 1 month"
  ExpiresByType image/gif "access plus 1 month"
  ExpiresByType image/webp "access plus 1 month"
  ExpiresByType image/avif "access plus 1 month"
  ExpiresByType image/svg+xml "access plus 1 month"
  ExpiresByType image/x-icon "access plus 1 month"
  ExpiresByType text/css "access plus 1 week"
  ExpiresByType text/javascript "access plus 1 week"
  ExpiresByType application/javascript "access plus 1 week"
  ExpiresByType font/woff "access plus 1 year"
  ExpiresByType font/woff2 "access plus 1 year"
  ExpiresByType font/ttf "access plus 1 year"
  ExpiresByType font/otf "access plus 1 year"
  ExpiresByType application/vnd.ms-fontobject "access plus 1 year"
  ExpiresByType video/mp4 "access plus 1 month"
  ExpiresByType video/webm "access plus 1 month"
  ExpiresByType audio/mpeg "access plus 1 month"
  ExpiresByType audio/ogg "access plus 1 month"
  ExpiresByType text/html "access plus 0 seconds"
  ExpiresByType application/xhtml+xml "access plus 0 seconds"
</IfModule>

64 regels

Sommige browsers verwijderen de punt aan het begin of voegen .txt toe. Hernoem het gedownloade bestand vóór het uploaden naar .htaccess.

Dit moet je controleren

  • Als je site achter Cloudflare, een loadbalancer of een reverse proxy draait, ziet Apache vaak alleen HTTP en blijft het eindeloos doorverwijzen (fout ERR_TOO_MANY_REDIRECTS). Schakel dan ‘Achter een proxy’ in.

Vóór het uploaden

  • Maak een Backup van de bestaande .htaccess, als die er al is.
  • Test het bestand eerst op een staging-site, niet op de livewebsite.
  • Plaats het in de hoofdmap van jouw domein (meestal public_html of htdocs). De naam begint met een punt.
  • Geeft de pagina daarna een 500-fout, hernoem het bestand dan via FTP en controleer het foutenlogboek van je server.

Voorbeeldresultaat

Wat deze .htaccess-generator je oplevert

Je schakelt onderdelen in en krijgt een kant-en-klaar .htaccess-bestand om te kopiëren of downloaden. Voor wachtwoordbeveiliging wordt ook een .htpasswd met bcrypt-hash aangemaakt en voor PHP-waarden een .user.ini. Bij riskante instellingen verschijnt meteen een waarschuwing. Drie voorbeelden:

Voorbeeld 1: nieuwe website op example.com

Invoer:

  • Domein: example.com
  • HTTPS afdwingen, adres altijd zonder www
  • GZIP-compressie aan
  • Caching: afbeeldingen 1 maand, CSS en JavaScript 1 week, HTML altijd opnieuw controleren
  • Directorylijsten uitschakelen

Uitvoer (.htaccess):

# .htaccess gegenereerd met de .htaccess-generator van ZAP-Hosting
# Maak vóór het uploaden een reservekopie en test eerst in een testomgeving.

# HTTPS en domeinnotatie
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Algemeen en beveiliging
Options -Indexes

# Compressie
<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript application/javascript application/json application/ld+json application/xml application/xhtml+xml application/rss+xml application/atom+xml image/svg+xml image/x-icon font/ttf font/otf application/vnd.ms-fontobject
</IfModule>

# Browsercaching
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/jpeg "access plus 1 month"
  ExpiresByType image/png "access plus 1 month"
  ExpiresByType image/gif "access plus 1 month"
  ExpiresByType image/webp "access plus 1 month"
  ExpiresByType image/avif "access plus 1 month"
  ExpiresByType image/svg+xml "access plus 1 month"
  ExpiresByType image/x-icon "access plus 1 month"
  ExpiresByType text/css "access plus 1 week"
  ExpiresByType text/javascript "access plus 1 week"
  ExpiresByType application/javascript "access plus 1 week"
  ExpiresByType text/html "access plus 0 seconds"
  ExpiresByType application/xhtml+xml "access plus 0 seconds"
</IfModule>

Resultaat in woorden: Een adres als http://www.example.com/seite gaat met één 301-omleiding naar https://example.com/seite. Bezoeken via http:// zonder www worden eveneens met een 301-omleiding naar https:// gestuurd. Afbeeldingen blijven 1 maand in de browsercache (max-age=2592000), CSS en JavaScript 1 week, en HTML-pagina's worden bij elk bezoek opnieuw gecontroleerd. HTML, CSS, JavaScript en JSON worden met GZIP gecomprimeerd verzonden. Wie een map zonder index-bestand opent, ziet geen bestandenlijst meer, maar een 403-fout.

Voorbeeld 2: stagingpagina met wachtwoord

Invoer:

  • Tekst van het wachtwoordverzoek: Staging
  • Pad naar de .htpasswd: /home/example/.htpasswd
  • Gebruiker alice met het wachtwoord Sommer-2026!
  • Zoekmachines blokkeren

Uitvoer (.htaccess):

# .htaccess gegenereerd met de .htaccess-generator van ZAP-Hosting
# Maak vóór het uploaden een reservekopie en test eerst in een testomgeving.

# Wachtwoordbeveiliging
AuthType Basic
AuthName "Staging"
AuthUserFile /home/example/.htpasswd
Require valid-user

<IfModule mod_headers.c>
  Header always set X-Robots-Tag "noindex, nofollow"
</IfModule>

Uitvoer (.htpasswd):

alice:$2y$10$EixZaYVK1fsbw1ZfbX3OXevuQZIxS3zUD8zrCJEoRasNwfjhtG6f.

Resultaat in woorden: Bezoekers zien een aanmeldvenster met de tekst ‘Staging’. Zonder geldige gebruikersgegevens geeft de server status 401 terug. In .htpasswd staat alleen de bcrypt-hash: $2y$ staat voor bcrypt, 10 is de kostenfactor, gevolgd door salt en hash. Het wachtwoord zelf staat nergens. Plaats het bestand op het pad uit AuthUserFile, bij voorkeur buiten de webmap.

Voorbeeld 3: één pagina verplaatsen, één verwijderen

Invoer:

  • /old-page verwijst met een 301-redirect door naar /new-page, inclusief alles daaronder
  • /summer-sale is permanent verwijderd (410), uitsluitend dit exacte pad

Uitvoer (.htaccess):

# .htaccess gegenereerd met de .htaccess-generator van ZAP-Hosting
# Maak vóór het uploaden een reservekopie en test eerst in een testomgeving.

# Eigen omleidingen
Redirect 301 /old-page /new-page
RedirectMatch 410 "^/summer-sale/?$"

Resultaat in woorden: /old-page en /old-page/info worden met 301 doorgestuurd naar /new-page en /new-page/info. De subpagina's blijven dus behouden. /summer-sale geeft status 410 (Gone) terug, zodat zoekmachines de pagina sneller uit hun index verwijderen. Een adres als /old-pages blijft ongewijzigd, omdat de regel alleen op padgrenzen werkt. De tool wijst er ook op dat de browser een 301 permanent onthoudt en dat je nieuwe regels eerst met 302 moet testen.

Zo werkt het

Zo maak je een .htaccess-bestand

In vier stappen van je keuze naar een getest bestand, zonder account of installatie.

Stap 1

Bouwblokken selecteren

Voer bovenaan je domein in en schakel de onderdelen in die je nodig hebt, of begin met een sjabloon: ‘Goede basisinstellingen’, ‘Staging beveiligen’ of ‘Domein verhuizen’. Bij elk onderdeel staat kort wat het doet.

Stap 2

Opties instellen

Stel omleidingen met 301, 302, 307, 308 of 410, gebruikers, foutpagina's of cacheduur in. De tool waarschuwt voor riskante instellingen, zoals omleidingslussen, ontbrekende HTTPS bij wachtwoordbeveiliging of een te lange cacheduur.

Stap 3

Bestand kopiëren of downloaden

De uitvoer wordt bij elke wijziging bijgewerkt. Kopieer de .htaccess of download hem. Bij wachtwoordbeveiliging krijg je ook een .htpasswd met de bcrypt-hash; bij PHP-instellingen een .user.ini.

Stap 4

Uploaden en testen

Maak een Backup van het bestaande bestand, plaats het nieuwe bestand in de hoofdmap van je domein en open de pagina. Test doorverwijzingen eerst met 302 en pas daarna met 301.

htpasswd-generator

htpasswd-generator: .htpasswd met bcrypt-hash maken

Voor wachtwoordbeveiliging met .htaccess heb je naast de .htaccess ook een .htpasswd nodig. Daarin staat per regel een gebruiker met het versleutelde wachtwoord. De generator hierboven maakt de regel in het onderdeel ‘Wachtwoordbeveiliging’; je browser berekent de hash en het wachtwoord wordt nergens naartoe verzonden.

Opbouw van een .htpasswd

Eén regel per gebruiker in de indeling gebruikersnaam:hash. Voorbeeld voor de gebruiker en het wachtwoord uit het bovenstaande voorbeeld:

alice:$2y$10$EixZaYVK1fsbw1ZfbX3OXevuQZIxS3zUD8zrCJEoRasNwfjhtG6f.

Welke hash is veilig?

bcrypt, herkenbaar aan $2y$, is de aanbevolen hash en wordt ondersteund door Apache 2.4. Oudere formaten zoals MD5 ($apr1$), SHA-1 en crypt zijn zwakker en sneller te kraken. Daarom genereert de generator bcrypt-hashes.

Alternatief op de server

Met shelltoegang maak je hetzelfde bestand met het programma htpasswd. De optie -B gebruikt bcrypt, -c maakt het bestand opnieuw aan:

htpasswd -cB .htpasswd benutzername

Veelvoorkomende taken

.htaccess-omleiding, HTTPS, wachtwoordbeveiliging en WordPress: regels om te kopiëren

De vier meest voorkomende redenen voor een .htaccess als kant-en-klare regels. Pas de paden en het domein aan of laat ze door de generator hierboven maken.

.htaccess-omleiding (301)

Redirect 301 leidt een pagina permanent om, inclusief alle onderliggende paden. /alte-seite/info wordt /neue-seite/info. De regel hoort in het .htaccess-bestand in de hoofdmap van het domein.

Redirect 301 /alte-seite /neue-seite

.htaccess HTTPS afdwingen

Leidt elk http-verzoek met een 301-redirect om naar https. Staat de site achter Cloudflare of een proxy, dan moet je ook de header X-Forwarded-Proto controleren om een omleidingslus te voorkomen.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

.htaccess-wachtwoordbeveiliging

Vraagt om een gebruikersnaam en wachtwoord voor de map. Bij AuthUserFile staat het volledige serverpad naar .htpasswd, bij voorkeur buiten de webmap.

AuthType Basic
AuthName "Beveiligd gedeelte"
AuthUserFile /pfad/zur/.htpasswd
Require valid-user

.htaccess voor WordPress

Zo ziet het standaardblok eruit dat WordPress zelf aanmaakt. Wijzig het niet. Eigen regels, zoals doorverwijzingen of HTTPS, moeten erboven staan. Anders werken ze niet.

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Overzicht

Deze Apache-directives liggen ten grondslag aan de bouwstenen

Elke bouwsteen schrijft enkele duidelijk benoemde instructies naar het bestand. De tabel laat zien welke dat zijn en welke Apache-module ervoor verantwoordelijk is. Als een optionele module ontbreekt, negeert Apache het blok in plaats van een fout te tonen.

Bouwblokken, Apache-directives en bijbehorende modules
BouwblokRichtlijnenApache-module
HTTPS en wwwRewriteCond, RewriteRule [R=301]mod_rewrite
DoorverwijzingenRedirect, RedirectMatch, RewriteRulemod_alias, mod_rewrite
WachtwoordbeveiligingAuthType Basic, AuthName, AuthUserFile, Require valid-usermod_auth_basic, mod_authn_file, mod_authz_user
IP-toegangRequire ip, Require not ip, RequireAny, RequireAllmod_authz_host, mod_authz_core
Foutpagina'sErrorDocumentcore
BrowsercachingExpiresActive, ExpiresByTypemod_expires
CompressieAddOutputFilterByType DEFLATE, BROTLI_COMPRESSmod_deflate, mod_brotli
HotlinkbeveiligingRewriteCond %{HTTP_REFERER}, RewriteRule [F]mod_rewrite
BeveiligingOptions -Indexes, FilesMatch, ServerSignature Offcore, mod_authz_core
BeveiligingsheadersHeader always setmod_headers
PHP-waardenphp_value, .user.inimod_php

Meer ontdekken

Meer tools

FAQ

Veelgestelde vragen over .htaccess-generator

Korte antwoorden over .htaccess, omleidingen, wachtwoordbeveiliging en deze tool.

Een .htaccess is een configuratiebestand voor de Apache-webserver dat per directory geldt. Hiermee beheer je omleidingen, wachtwoordbeveiliging, foutpagina's, caching, compressie en toegangsregels zonder de serverconfiguratie aan te passen. Dat is vooral handig bij shared hosting. Apache en de LiteSpeed-webserver lezen het bestand; nginx negeert het. Bij nginx horen de regels als server- of location-blokken in de configuratie. Apache leest de .htaccess bij elk verzoek opnieuw. Op een eigen server, zoals een VPS, kun je dezelfde regels daarom beter rechtstreeks in de configuratie van de virtuele host zetten.

Het bestand heet precies .htaccess, met een punt aan het begin en zonder extensie. Het hoort in de hoofdmap van je domein, meestal public_html, htdocs of httpdocs. Regels gelden voor de map waarin het bestand staat en voor alle submappen. Omdat bestanden die met een punt beginnen verborgen zijn, toont je FTP-programma ze soms niet. Schakel daar de weergave van verborgen bestanden in.

De eenvoudigste manier is de regel Redirect 301 /alte-seite /neue-seite. Die leidt het pad en alles daaronder om: /alte-seite/info wordt dus /neue-seite/info. Wil je alleen één specifiek pad omleiden, gebruik dan RedirectMatch 301 met een reguliere expressie. Als bestemming kun je ook een volledig adres zoals https://beispiel.de/seite gebruiken. De generator maakt beide vormen voor je en waarschuwt bij een omleidingslus. Naast 301 (permanent) biedt hij 302 (tijdelijk), 307, 308 en 410 voor verwijderde pagina's. Test nieuwe regels eerst met 302, want browsers onthouden een 301 permanent.

Je schakelt de Rewrite-Engine in, controleert met RewriteCond of HTTPS uitstaat en verwijst met RewriteRule via 301 door naar het https-adres. Het onderdeel „HTTPS en www“ maakt het volledige blok. Draait je website achter Cloudflare, een loadbalancer of een reverse proxy, dan ziet Apache vaak alleen HTTP en blijft het doorverwijzen. In de browser verschijnt ERR_TOO_MANY_REDIRECTS. Schakel dan de optie „Achter een proxy“ in, die ook de header X-Forwarded-Proto controleert.

Je hebt twee bestanden nodig: een .htaccess met AuthType Basic, AuthName, AuthUserFile en Require valid-user, en een .htpasswd met één regel per gebruiker in de vorm name:hash. De generator maakt beide. Het wachtwoord wordt in je browser met bcrypt gehasht, herkenbaar aan $2y$ aan het begin van de hash. MD5 ($apr1$), SHA-1 en crypt zijn minder veilig. Plaats de .htpasswd buiten de webdirectory en schakel HTTPS in, want Basic Auth stuurt de inloggegevens bij elk verzoek mee. Combineer je wachtwoordbeveiliging met het onderdeel ‘IP-toegang’, kies dan ‘IP of wachtwoord’ of ‘IP en wachtwoord’. De generator maakt er het juiste Require-blok van.

Een 500-fout betekent bijna altijd dat Apache een regel niet begrijpt. Veelvoorkomende oorzaken zijn een typefout, een directive waarvoor de module op de server ontbreekt, of een instelling die je hostingprovider niet toestaat in de .htaccess, zoals Options of php_value. Hernoem het bestand via FTP; dan werkt de site weer. De precieze fout staat in het foutlogboek van de server. De generatorblokken voor caching, compressie, headers en PHP zijn beveiligd met IfModule en veroorzaken geen 500-fout als modules ontbreken. php_value werkt alleen wanneer PHP als Apache-module draait. Voor PHP-FPM levert de generator de PHP-instellingen ook als .user.ini.

WordPress maakt zelf een blok aan tussen # BEGIN WordPress en # END WordPress. Laat dit ongewijzigd (het staat in het bovenstaande gedeelte om te kopiëren). Voeg de door de generator gemaakte regels ervoor in. Omleidingen en HTTPS-regels moeten vóór het WordPress-blok staan, anders werken ze niet omdat WordPress alle aanvragen naar index.php stuurt. Voor permalinks heeft WordPress de rewrite-engine nodig, dus schakel die niet uit.

Nee. De generator werkt volledig in je browser: je invoer wordt niet naar een server verzonden en niet opgeslagen. Ook de bcrypt-hash wordt lokaal gemaakt. Alleen de namen van ingeschakelde onderdelen komen in het adres terecht, nooit domeinen, paden, IP-adressen of wachtwoorden.

Bouw je momenteel iets op maat?

Met een eigen server staan de regels waar ze thuishoren: in je configuratie

Op een VPS van ZAP-Hosting beheer je Apache of nginx zelf, zonder de beperkingen van shared hosting.

4,4/5 Trustpilot32.000+ Actieve serversSinds 2010

Geen installatie. Geen risico. Binnen enkele seconden online.

Flexibele looptijdOp elk moment opzegbaarBinnen 60 seconden online

Op zoek naar meer tools? Alle ontwikkelaarstools bekijken