Wie kann ich alle Anfragen in einem Sprung an https und Nicht-www umleiten?

Dec 18 2019

Ich möchte alle Anfragen in einem Sprung für Haupt- / Homepage und andere Unterseiten an https und Nicht-www umleiten. Ich benutze den folgenden htaccess. Quelle

RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^mytesting\.com$ [OR] RewriteCond %{HTTP_HOST} ^www\.mytesting\.com$
RewriteRule .* https://www.mytesting.com%{REQUEST_URI} [R=301,L]

Aber ich habe die folgende Umleitung erhalten

Ich will so:

http://mytesting.com          > https://mytesting.com
http://www.mytesting.com      > https://mytesting.com
http://mytesting.com/faq      > https://mytesting.com/faq
https://mytesting.com         > https://mytesting.com
http://www.mytesting.com      > https://mytesting.com
http://www.mytesting.com/faq  > https://mytesting.com/faq
https://mytesting.com/faq     > https://mytesting.com/faq

Antworten

2 anubhava Dec 18 2019 at 21:41

Sie können diese Regel für beide Weiterleitungen in einer Regel verwenden:

RewriteCond %{HTTP_HOST} ^www\. [NC,OR]
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L,NE]

Hier ist die Erklärung dieser Regel:

  • RewriteCond %{HTTP_HOST} ^www\. [NC,OR]: wenn HOST_NAMEbeginnt mitwww.
  • [NC,OR]: Fallübereinstimmung und ORnächste Bedingung ignorieren
  • RewriteCond %{HTTPS} !on: HTTPSist nicht eingeschaltet
  • RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]: Diese Bedingung stimmt immer überein, da www.hier eine optionale Übereinstimmung vorliegt . Es wird verwendet, um Teilzeichenfolgen von zu erfassen, HTTP_HOSTohne www.mit dem (.+)Muster in Erfassungsgruppe 1 zu beginnen (auf das später zurück verwiesen wird %1). Beachten Sie, dass dies (?:..)eine nicht erfassende Gruppe ist.
  • RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L,NE]: ^wird immer übereinstimmen. Diese Regel wird https://%1%{REQUEST_URI}mit R=301Code umgeleitet . Woher %1stammt die Rückreferenz der Erfassungsgruppe Nr. 1 RewriteCond, wie oben erwähnt?