Waarom je login URL verbergen?
De standaard WordPress login pagina (/wp-login.php) is een van de meest aangevallen onderdelen van elke WordPress website. Hackers en bots weten precies waar deze pagina zich bevindt en voeren continu brute-force aanvallen uit.
Voordelen van een custom login URL:
- Stop brute-force aanvallen: Bots kunnen je login niet vinden
- Minder serverbelasting: Geen resources verspild aan bot-verkeer
- Schonere logs: Geen duizenden failed login attempts meer
- Security through obscurity: Extra beveiligingslaag
Met deze techniek maak je /wp-login.php en /wp-admin volledig onbereikbaar voor niet-ingelogde gebruikers. Alleen via jouw geheime URL kun je de login pagina bereiken.
Wat is een mu-plugin?
MU-plugins (Must-Use plugins) zijn speciale WordPress plugins die automatisch worden geactiveerd en niet kunnen worden uitgeschakeld via het admin panel. Ze worden geladen vóór normale plugins.
/wp-content/mu-plugins/
Waarom mu-plugins voor security?
- Altijd actief: Kunnen niet per ongeluk worden uitgeschakeld
- Vroeg geladen: Worden uitgevoerd vóór andere plugins
- Update-proof: WordPress updates raken deze bestanden niet aan
- Onzichtbaar: Verschijnen niet in de normale plugin lijst
mu-plugins map bestaat standaard niet. Je moet deze zelf aanmaken in /wp-content/.
De Complete Code
Hieronder vind je de complete mu-plugin code die je login URL verbergt en de standaard login blokkeert.
<?php
/**********************************************************************
* *
* ************************************************************** *
* * * *
* * WPTS.nl - OG WordPress Login Core * *
* * Custom Login Loader / Default Login Lockdown * *
* * * *
* * No plugins. No IP lists. No bullshit. * *
* * * *
* ************************************************************** *
* *
**********************************************************************/
add_action('init', function () {
$path = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
/* === ALLOW ONLY CUSTOM LOGIN === */
if ($path === 'mijn-geheime-login') {
require_once ABSPATH . 'wp-login.php';
exit;
}
/* === KILL DEFAULT LOGIN === */
if ($path === 'wp-login.php') {
wp_die('403 Forbidden', 'Forbidden', ['response' => 403]);
}
}, 0);
/* === LOCK WP-ADMIN FOR NON-AUTH USERS === */
add_action('admin_init', function () {
if (!is_user_logged_in()) {
wp_die('403 Forbidden', 'Forbidden', ['response' => 403]);
}
});
Hoe werkt deze code?
De code heeft drie belangrijke functies:
1. Custom Login URL
if ($path === 'mijn-geheime-login') {
require_once ABSPATH . 'wp-login.php';
exit;
}
Als iemand naar /mijn-geheime-login gaat, wordt de echte wp-login.php geladen. Dit is de enige manier om bij de login pagina te komen.
2. Blokkeer wp-login.php
if ($path === 'wp-login.php') {
wp_die('403 Forbidden', 'Forbidden', ['response' => 403]);
}
Directe toegang tot /wp-login.php resulteert in een 403 Forbidden error. Bots en hackers krijgen geen login pagina te zien.
3. Bescherm wp-admin
add_action('admin_init', function () {
if (!is_user_logged_in()) {
wp_die('403 Forbidden', 'Forbidden', ['response' => 403]);
}
});
Niet-ingelogde gebruikers die /wp-admin proberen te bezoeken krijgen ook een 403 error. Ze worden niet doorgestuurd naar de login pagina.
Installatie Stap-voor-Stap
-
1
Maak de mu-plugins map aan
Verbind via FTP met je server en navigeer naar
/wp-content/. Maak een nieuwe map aan genaamdmu-plugins(als deze nog niet bestaat). -
2
Maak het PHP bestand
Maak een nieuw bestand aan genaamd
wpts-login-core.phpin de mu-plugins map. -
3
Kopieer de code
Kopieer de complete code van hierboven naar het bestand. Vergeet niet je custom URL aan te passen!
-
4
Test de nieuwe login (BELANGRIJK!)
Open een nieuw incognito browservenster en ga naar
https://jouwsite.nl/mijn-geheime-login. Log in om te verifiëren dat het werkt. -
5
Verifieer de blokkade
Test of
/wp-login.phpen/wp-adminnu "403 Forbidden" geven.
mijn-geheime-login naar je eigen geheime URL! Kies iets unieks dat niet te raden is. Noteer deze URL op een veilige plek.
Extra .htaccess Beveiliging
Voor maximale beveiliging kun je ook op server-niveau de standaard login blokkeren. Voeg deze regels toe aan je .htaccess bestand:
######################################################################
# #
# ********************************************************** #
# * * #
# * WPTS.nl - OG WordPress Access Lock * #
# * Plugin-Free / Update-Proof * #
# * * #
# ********************************************************** #
# #
######################################################################
# --- HARD BLOCK DEFAULT LOGIN FILE ---
<Files wp-login.php>
Require all denied
</Files>
# --- BLOCK WP-ADMIN FOR NON-AUTH USERS ---
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/wp-admin
RewriteCond %{REQUEST_URI} !^/wp-admin/admin-ajax.php$
RewriteCond %{HTTP_COOKIE} !wordpress_logged_in_
RewriteRule .* - [F,L]
</IfModule>
Uitleg van de .htaccess regels:
Blokkeer wp-login.php
<Files wp-login.php>
Require all denied
</Files>
Dit blokkeert alle directe verzoeken naar het wp-login.php bestand op server-niveau. De PHP code wordt niet eens uitgevoerd.
Bescherm wp-admin
RewriteCond %{REQUEST_URI} ^/wp-admin
RewriteCond %{REQUEST_URI} !^/wp-admin/admin-ajax.php$
RewriteCond %{HTTP_COOKIE} !wordpress_logged_in_
RewriteRule .* - [F,L]
Deze regels blokkeren wp-admin voor gebruikers zonder de wordpress_logged_in_ cookie. Let op de uitzondering voor admin-ajax.php - dit is nodig voor AJAX functionaliteit op de frontend.
Je Custom URL Kiezen
Het kiezen van een goede custom login URL is belangrijk. Hier zijn enkele tips:
Goede voorbeelden:
/toegang-2025-xyz- Combinatie van woorden en cijfers/beheer-portaal-abc123- Beschrijvend maar uniek/inloggen-7f8g9h- Random suffix/admin-toegang-geheim- Meerdere woorden
Vermijd deze:
/login- Te voor de hand liggend/admin- Wordt ook gescand door bots/inloggen- Te makkelijk te raden/wp-admin-login- Bevat "wp-admin"
Veelgestelde Vragen
Ik kan niet meer inloggen! Wat nu?
Als je jezelf hebt buitengesloten:
- Verbind via FTP met je server
- Ga naar
/wp-content/mu-plugins/ - Hernoem
wpts-login-core.phpnaarwpts-login-core.php.disabled - Nu kun je weer via
/wp-login.phpinloggen - Pas de code aan en hernoem het bestand terug
De custom URL werkt niet. Wat kan er mis zijn?
Mogelijke oorzaken:
- Typo in de code: Controleer of de URL exact overeenkomt
- Caching: Leeg je browser cache en eventuele server cache
- Permalink structuur: Zorg dat permalinks zijn ingesteld (niet "Plain")
- Conflict met .htaccess: Controleer of er geen conflicterende regels zijn
AJAX/contactformulieren werken niet meer
Als frontend AJAX niet meer werkt na implementatie van de .htaccess regels, controleer of deze regel aanwezig is:
RewriteCond %{REQUEST_URI} !^/wp-admin/admin-ajax.php$
Deze regel zorgt ervoor dat admin-ajax.php wel toegankelijk blijft.
Werkt dit ook met WooCommerce?
Ja, deze oplossing werkt met WooCommerce. Klanten kunnen nog steeds inloggen via hun account pagina. Alleen de admin login is verborgen.
Kan ik de URL later nog wijzigen?
Ja, je kunt de custom URL altijd wijzigen. Open het bestand via FTP, pas de URL aan in de code, en sla op. De wijziging is direct actief.
Blijft dit werken na WordPress updates?
Ja! mu-plugins worden niet aangeraakt door WordPress updates. Het bestand blijft actief en functioneel na elke core update.
Conclusie
Het verbergen van je WordPress login URL is een effectieve maatregel tegen brute-force aanvallen. Met deze mu-plugin + .htaccess combinatie heb je een robuuste, plugin-vrije oplossing die niet kapot gaat bij WordPress updates.
Checklist:
Hulp nodig met WordPress beveiliging?
Onze experts helpen je graag met het implementeren van deze en andere beveiligingsmaatregelen.