Post 1431
Wordpress

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.