Security 16 december 2025 10 min leestijd

WordPress Login URL Verbergen: Custom Login Zonder Plugins

Stop brute-force aanvallen door je login pagina volledig te verbergen. Leer hoe je met een simpele mu-plugin een custom login URL maakt en wp-login.php blokkeert.

Thomas de Groot Security Expert bij wpts.nl
/wp-login.php Gebruikersnaam Wachtwoord Inloggen 403 FORBIDDEN /mijn-geheime-login Gebruikersnaam Wachtwoord Inloggen Alleen jij kent deze URL
Let op: Noteer je custom login URL op een veilige plek! Als je deze vergeet, kun je niet meer inloggen. Test altijd eerst of je kunt inloggen via de nieuwe URL voordat je uitlogt.

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.

mu-plugins locatie
/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
Pro tip: De 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.

wpts-login-core.php
<?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

Custom login check
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

Kill default login
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

Lock 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. 1
    Maak de mu-plugins map aan

    Verbind via FTP met je server en navigeer naar /wp-content/. Maak een nieuwe map aan genaamd mu-plugins (als deze nog niet bestaat).

  2. 2
    Maak het PHP bestand

    Maak een nieuw bestand aan genaamd wpts-login-core.php in de mu-plugins map.

  3. 3
    Kopieer de code

    Kopieer de complete code van hierboven naar het bestand. Vergeet niet je custom URL aan te passen!

  4. 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. 5
    Verifieer de blokkade

    Test of /wp-login.php en /wp-admin nu "403 Forbidden" geven.

Belangrijk: Verander 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:

.htaccess
######################################################################
#                                                                    #
#    **********************************************************      #
#    *                                                        *      #
#    *          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 directive
<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

Rewrite rules
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.

Dubbele beveiliging: De combinatie van mu-plugin + .htaccess geeft je twee lagen bescherming. Als één faalt, vangt de ander het op.

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"
Bewaar je URL veilig: Sla je custom login URL op in een wachtwoordmanager of op een veilige offline locatie. Als je deze vergeet, moet je via FTP de mu-plugin aanpassen.

Veelgestelde Vragen

Ik kan niet meer inloggen! Wat nu?

Als je jezelf hebt buitengesloten:

  1. Verbind via FTP met je server
  2. Ga naar /wp-content/mu-plugins/
  3. Hernoem wpts-login-core.php naar wpts-login-core.php.disabled
  4. Nu kun je weer via /wp-login.php inloggen
  5. 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.

Neem contact op
Deel dit artikel:

Gerelateerde artikelen

.htaccess Security
Security

WordPress .htaccess Beveiliging: 12 Regels

<?php wp-config
Security

WordPress wp-config.php Beveiliging

Security

wp-config.php Buiten Root Plaatsen