fragen stichworte

Schmutzige Weiterleitungen in .htaccess

text/x-generic .htaccess (UTF-8-Unicode-Text)

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# 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>

Eines meiner Optimierungstools zeigt an, dass ich mehrere Weiterleitungen für www (HTTP) habe, also HTTP zu HTTPS und noch einmal HTTPS ZU HTTPS. Wie kann ich das beheben?

2 redirects reported by optimization tool

antworten

...which is HTTP to HTTPS and once again HTTPS TO HTTPS

Insbesondere werden in Ihrem Screenshot zwei Umleitungen angezeigt, wenn Sie HTTP und www (z. B. http://www.example.com) anfordern:

  1. http://www.example.com bis https://www.example.com (HTTP an HTTPS)
  2. https://www.example.com bis https://example.com (www an nicht-www)

No.1 wird durch Ihre .htaccess -Regel ausgelöst, und No.2 wird zweifellos von WordPress selbst in PHP ausgelöst.

Diese Reihe von Weiterleitungen ist tatsächlich erforderlich, wenn Sie vorhaben, HSTS zu implementieren (ungeachtet dessen, was Ihr "Optimierungstool" meldet).

Andernfalls können Sie die doppelte Umleitung vermeiden, indem Sie den Hostnamen in .htaccess kanonisieren, bevor WordPress dies tut. Eine Möglichkeit ist das Hinzufügen einer zusätzlichen Regel vor Ihrem vorhandenen HTTP-Link zur HTTPS-Umleitung. Zum Beispiel:

RewriteEngine On

# www to non-www (and HTTPS)
RewriteCond %{HTTP_HOST} ^www\.([a-z.]+?)\.?$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]   

# HTTP to HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Die %1 in der RewriteRule -Erwiedung ist eine Rückverweisung auf die erste erfasste Gruppe im letzten übereinstimmenden CondPattern. Mit anderen Worten, der Hostname abzüglich eines beliebigen www. -Prefixes (und eines nachfolgenden Punkts im Fall eines FQDN).

Beachten Sie, dass die Weiterleitung von www zu nicht-www auch zu HTTPS umleitet. So wird sichergestellt, dass das folgende HTTP zu HTTPS niemals verarbeitet wird, wenn die erste Weiterleitung erfolgt (also keine 2. Weiterleitung).

Stellen Sie sicher, dass Sie Ihren Browser-Cache vor dem Testen gelöscht haben. (Um Probleme mit dem Caching zu vermeiden, ist es oft vorzuziehen, zuerst mit 302 - temporäre Weiterleitungen zu testen.)

Wenn ich Ihr Problem verstehe, sollten Sie www aus {HTTP_HOST}

entfernen  
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

sollte zu

geändert werden  
RewriteCond %{HTTP_HOST} ^www\\.([a-z.]+)$ [NC]<br>
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Ich hoffe, es hilft dir.