it-swarm.com.de

WordPress HTTP zu HTTPS ohne abschließenden Schrägstrich führt zu doppelter Umleitung

Mir ist aufgefallen, dass auf einer meiner WordPress Websites doppelte Weiterleitungen auftreten, wenn ein Benutzer oder ein Bot versucht, eine URL ohne HTTPS und mit einem abschließenden Schrägstrich aufzurufen.

Kurz gesagt:

  • http://example.com/contact-us leitet zu https://www.example.com/contact-us weiter
  • https://www.example.com/contact-us leitet zu https://www.example.com/contact-us/ weiter

Meine htaccess-Datei sieht so aus:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Was muss ich ändern, um diese doppelten Weiterleitungen zu verhindern?

5
Simon Hayter

Ich habe es geschafft, dies mit einem Snippet von anubhava on Stack Overflow zum Laufen zu bringen. Wenn jemand ein potenzielles Problem mit diesem Code entdeckt oder eine bessere und sauberere Weiterleitung hat, zögern Sie bitte nicht, Ihren Code als Antwort zu veröffentlichen.

SOURCE

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_Host} ^domain\.com$ [OR]
RewriteCond %{HTTPS} off
RewriteRule ^/?$ https://www.domain.com [R=301,L]

RewriteCond %{HTTP_Host} ^domain\.com$ [OR]
RewriteCond %{HTTPS} off [OR]
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule ^(.+?)/?$ https://www.domain.com/$1/ [R=301,L]

Meine .htaccess-Datei sieht also jetzt so aus:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_Host} ^example\.com$ [OR]
RewriteCond %{HTTPS} off
RewriteRule ^/?$ https://www.example.com/ [R=301,L]

RewriteCond %{HTTP_Host} ^example\.com$ [OR]
RewriteCond %{HTTPS} off [OR]
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule ^(.+?)/?$ https://www.example.com/$1/ [R=301,L]

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
5
Simon Hayter