WordPress auf Ubuntu: Apache-Konfiguration für saubere Permalinks
Wer WordPress auf einem Ubuntu-Server mit Apache betreibt, stößt häufig auf ein Problem: Die sauberen Permalink-Strukturen wie /beitragsname/ funktionieren nicht – stattdessen erscheinen nur die Standard-URLs mit ?p=123. Die Ursache liegt fast immer in einer fehlerhaften Apache-Konfiguration, die mod_rewrite nicht zulässt.
Das Problem: AllowOverride None
Standardmäßig setzt Ubuntu bei Apache-Installationen AllowOverride None im Virtual-Host. Das bedeutet: Die .htaccess-Datei von WordPress wird komplett ignoriert – und damit auch alle Rewrite-Regeln, die WordPress für seine Permalink-Struktur benötigt.
Lösung: AllowOverride All setzen
Die Konfiguration in der Apache-Site-Datei (z.B. /etc/apache2/sites-available/wordpress.conf) muss entsprechend angepasst werden:
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
mod_rewrite aktivieren
Neben der Konfigurationsänderung muss auch das Apache-Modul mod_rewrite aktiviert sein:
# Modul aktivieren
sudo a2enmod rewrite
# Apache neu starten
sudo service apache2 restart
Vollständige Virtual-Host-Konfiguration für WordPress
Hier eine vollständige, produktionsreife Virtual-Host-Konfiguration für WordPress auf Ubuntu mit SSL:
<VirtualHost *:80>
ServerName domain.de
ServerAlias www.domain.de
Redirect permanent / https://domain.de/
</VirtualHost>
<VirtualHost *:443>
ServerName domain.de
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/domain.de/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain.de/privkey.pem
<Directory /var/www/html>
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/domain_error.log
CustomLog ${APACHE_LOG_DIR}/domain_access.log combined
</VirtualHost>
WordPress .htaccess prüfen
WordPress erzeugt beim Speichern der Permalink-Einstellungen automatisch die passende .htaccess. Falls die Datei fehlt oder leer ist, hier der korrekte Inhalt:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Permalink-Einstellungen in WordPress zurücksetzen
Nach der Apache-Konfiguration einmal die Permalink-Einstellungen in WordPress speichern (auch ohne Änderung), damit WordPress die .htaccess neu schreibt: Einstellungen → Permalinks → Speichern. Oder per WP-CLI:
wp rewrite flush --hard
Weitere Tipps zur WordPress-Administration auf eigenen Servern gibt es in der Kategorie WordPress. Wer Plesk als Hosting-Panel einsetzt, findet dort spezifische Konfigurationshinweise unter Plesk.


