Hoofdstuk 4 van 5

Laravel-applicatie serveren met Apache op Debian 13

geverifieerd op 7 september 2026 · 4 min

Kort antwoord

Drie voorwaarden om Laravel met Apache te serveren: DocumentRoot op de map public/, sudo a2enmod rewrite, en AllowOverride All op die map. Zonder die laatste richtlijn negeert Apache de .htaccess die Laravel meelevert: de startpagina verschijnt, maar elke andere route geeft 404 terug.

Apache is nog altijd de meest gebruikte webserver op shared hosting en op servers die al jaren draaien. Een Laravel-applicatie achter Apache serveren vraagt drie dingen: een virtual host waarvan de documentroot naar public/ wijst, de rewrite-module ingeschakeld, en AllowOverride All zodat het .htaccess-bestand dat Laravel meelevert ook echt gelezen wordt.

Dit hoofdstuk hoort bij Laravel installeren op een Debian-server, onderdeel van het traject Webontwikkeling. Dat derde punt vergeten is vrijwel altijd de reden dat routes een 404 teruggeven. Stappen gecontroleerd op Debian 13 met Apache 2.4.68 en Laravel 13.30.1.

Apache en de PHP-module installeren

bash
sudo apt update
sudo apt install -y apache2 libapache2-mod-php
apache2 -v
code
Server version: Apache/2.4.68 (Debian)

Het pakket libapache2-mod-php schakelt PHP in Apache in. Controleer dat:

bash
a2query -m | grep php
code
php8.4 (enabled by maintainer script)

Zet daarna de rewrite-module aan, die standaard niet actief is:

bash
sudo a2enmod rewrite

Het project neerzetten

Maak de applicatie aan met Composer, onder een account zonder rootrechten:

bash
su - deploy
composer create-project laravel/laravel /home/deploy/app --no-interaction
cd /home/deploy/app
php artisan --version   # Laravel Framework 13.30.1

Geef vervolgens schrijfrechten aan de enige drie mappen die ze nodig hebben, inclusief database/ zolang de applicatie de bij de installatie aangemaakte SQLite-database gebruikt:

bash
sudo chown -R deploy:www-data /home/deploy/app/storage /home/deploy/app/bootstrap/cache /home/deploy/app/database
sudo chmod -R 775 /home/deploy/app/storage /home/deploy/app/bootstrap/cache /home/deploy/app/database
sudo chmod o+x /home/deploy   # Apache moet de persoonlijke map kunnen doorlopen

De virtual host aanmaken

/etc/apache2/sites-available/laravel.conf
<VirtualHost *:80>
    ServerName exemple.com
    DocumentRoot /home/deploy/app/public

    <Directory /home/deploy/app/public>
        AllowOverride All
        Require all granted
        Options -Indexes +FollowSymLinks
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/laravel-error.log
    CustomLog ${APACHE_LOG_DIR}/laravel-access.log combined
</VirtualHost>

Zet de site aan, zet de standaardsite uit en controleer de syntaxis:

bash
sudo a2ensite laravel
sudo a2dissite 000-default
sudo apache2ctl configtest
sudo systemctl reload apache2
code
Syntax OK

AllowOverride All: de regel die alles bepaalt

Laravel levert een bestand public/.htaccess mee dat elke aanvraag naar index.php stuurt. Apache leest dat bestand alleen als de richtlijn AllowOverride dat toestaat. Zonder die richtlijn verschijnt de startpagina nog wel, maar geeft geen enkele andere route antwoord.

Het gedrag is gemeten op de health-route /up, die in elke recente installatie aanwezig is:

Configuratie / /up
AllowOverride All en rewrite actief 200 200
AllowOverride None 200 404

Dat is het symptoom om te herkennen: de startpagina werkt, al het andere geeft 404. Het probleem zit niet in de routes en niet in de code, maar in de configuratie van Apache.

Het begin van de .htaccess die Laravel meelevert, waar dit hele mechanisme van afhangt:

public/.htaccess
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle X-XSRF-Token Header
    RewriteCond %{HTTP:x-xsrf-token} .
    RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

De installatie controleren

bash
curl -s -o /dev/null -w "accueil : %{http_code}\n" http://127.0.0.1/
curl -s -o /dev/null -w "route   : %{http_code}\n" http://127.0.0.1/up
curl -s -o /dev/null -w ".env    : %{http_code}\n" http://127.0.0.1/.env
code
accueil : 200
route   : 200
.env    : 404

De 404 op /.env is het verwachte resultaat: omdat de root van de site public/ is, staat het bestand buiten de geserveerde boom en is het domweg niet bereikbaar. Krijg je een 200, dan wijst DocumentRoot naar de projectroot in plaats van naar public/, en zijn je databasegegevens voor iedereen leesbaar.

Overstappen op HTTPS

Certbot past de virtual host zelf aan en zet de automatische vernieuwing op:

bash
sudo apt install -y certbot python3-certbot-apache
sudo certbot --apache -d exemple.com

Denk eraan om de debugmodus uit te zetten en APP_URL gelijk te trekken met het HTTPS-adres, anders blijven de links en assets die Laravel genereert naar HTTP wijzen:

.env
APP_ENV=production
APP_DEBUG=false
APP_URL=https://exemple.com
bash
php artisan config:cache
php artisan route:cache
php artisan view:cache

Apache of nginx

Apache nginx
PHP uitvoeren ingebouwde module of PHP-FPM alleen PHP-FPM
Configuratie per map ja, via .htaccess nee, alles in de configuratie van de site
Rewriting voor Laravel meegeleverd door Laravel zelf te schrijven in het location-blok
Shared hosting heel gangbaar zeldzaam

Het .htaccess-bestand is het doorslaggevende voordeel van Apache op shared hosting: je stelt de rewriting in zonder toegang tot de configuratie van de server. Op een machine die je zelf beheert voldoen beide, en de keuze hangt af van wat je zelf kunt draaien.

Veelgemaakte fouten

AllowOverride ontbreekt of staat op None Apache negeert de .htaccess van Laravel. De startpagina antwoordt, elke andere route geeft 404. Symptoom gemeten op de route /up.
a2enmod rewrite vergeten De rewrite-module staat op Debian standaard uit. Zelfde effect als hierboven.
DocumentRoot op de projectroot Het bestand .env wordt downloadbaar. Het moet 404 teruggeven, wat bewijst dat de root echt public/ is.
Persoonlijke map niet doorloopbaar Een project in /home/deploy vereist chmod o+x /home/deploy, anders geeft Apache een permissiefout.
APP_URL na Certbot op HTTP laten staan De links en assets die Laravel genereert blijven naar HTTP wijzen.
Nieuwsbrief

Nieuwe tests, tutorials en projecten, per e-mail.

Reproduceerbare tests, geversioneerde code, gedateerde resultaten. Nooit spam.