Beitrag wurde zuletzt am aktualisiert

Einen Slash am Ende der URL erzwingen

Slash am Ende einer URL

Da gerade im Beitrag Weiterleitung von HTTP nach HTTPS in den Kommentaren die Frage für das Erzwingen eines Slashs am Ende der URL auf kam, hier eine Lösung für dieses Problem.

Worum geht es? Bei WordPress und anderen Website-Lösungen kann es vorkommen, dass eine Inhaltsseite mit und ohne Slash am Ende vom System erzeugt wird.

https://meine-url.de/beispielseite
https://meine-url.de/beispielseite/
https://meine-url.de/beispielseite//

Das ist nicht unbedingt schön, da es sich hierbei prinzipiell um zwei unterschiedliche Seiten handeln könnte und Google dies unter auch Umständen so bewertet. Demnach sollte für ein ordentliches SEO an dieser Stelle auch dafür gesorgt werden, dass es genau nur eine Schreibweise einer URL gibt. Im Ryte-Wiki wird auf diese Trailing Slash Problematik näher eingegangen.

Auch hierfür gibt es ein paar Zeilen Weiterleitungs-Code für die .htaccess-Datei:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /

  # Keine doppelten Slashes am Ende einer URL
  RewriteCond %{THE_REQUEST} ^[A-Z]+\ /(([^/\ ]+/)*)/+([^\ ]*)
  RewriteRule ^ /%1%3 [L,R=301]

  # Abschließenden Slash an URL erzwingen
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_URI} !(.*)/$
  RewriteCond %{REQUEST_URI} !^/wp-json
  RewriteRule ^(.*)$ https://meine-url.de/$1/ [L,R=301]
</IfModule>

Kopiert diesen Block in den vorderen Bereich eurer .htaccess-Datei. Nach eventuell vorhanden Weiterleitungen von http zu https und nicht www zu www bzw. umgekehrt. Je nachdem, ob und was ihr hier bei euch eingestellt habt. Zumindest sollte dieser Code vor den Einstellungen rund um das Caching, der Komprimierung usw. und auf jeden Fall vor dem #BEGIN WordPress-Block stehen.

Die Zeilen 10 bis 13 hatte ich bei meinen Seiten mit Contact Form 7 (CF7) bis vor gar nicht langer Zeit wie folgt in den .haccess-Dateien eingetragen:

  RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$
  RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.php [L]

Da dies aber beim Absenden des Formulars mit CF7 zu einem 404-Fehler führte, erfolgte irgendwann die oben genannte Anpassung. In dieser wird letztendlich nur /wp-json von diesem Redirect ausgeschlossen.

2 Kommentare zu "Einen Slash am Ende der URL erzwingen"

  1. Danke! Bin fast schon verzweifelt an meinen Contactform7 Einstellungen. Mit deinen htaccess zum abschließenden Slash funktioniert nun auch wieder der Versand über CF7.

  2. Vielen Dank. Das hat jetzt wunderbar geklappt. Allerdings würde ich noch etwas hinzufügen um den Code zu perfektionieren.


    RewriteEngine On
    RewriteBase /
    # Keine doppelten Slashes am Ende einer URL
    RewriteCond %{THE_REQUEST} ^[A-Z]+\ /(([^/\ ]+/)*)/+([^\ ]*)
    RewriteRule ^ /%1%3 [L,R=301]
    # Abschließenden Slash an URL erzwingen
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !(.*)/$
    RewriteCond %{REQUEST_URI} !^/wp-json
    # Das www. am Anfang weg
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    # Ausschließlich nur über https://
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

    Gruß Stephan

Hinterlasse einen Kommentar

E-Mail Adresse wird nicht veröffentlicht.