it-swarm.com.de

.htaccess Umleitung von www zu nicht-www mit SSL/HTTPS

Ich habe mehrere Domains unter einer einzigen .htaccess-Datei, die jeweils über SSL gesichert sind. Ich muss https für jede Domain erzwingen und gleichzeitig sicherstellen, dass die Weiterleitung von www an Nicht-www erfolgt. Hier ist was ich benutze was nicht funktioniert:

RewriteCond %{HTTP_Host} ^www.%{HTTP_Host}
RewriteRule ^.*$ https://%{HTTP_Host}%{REQUEST_URI}/$1 [R=301,L]

Beispiel:

https://www.strategice.com

sollte umleiten auf ...

https://strategice.com

Danke im Voraus!

49
aegenes

www zu nicht www mit https

RewriteEngine on

RewriteCond %{HTTP_Host} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
75

Ihre Bedingung wird niemals wahr sein, denn es ist wie "if (a == a + b)". 

Ich würde folgendes versuchen:

RewriteCond %{HTTP_Host} ^www\.(.*)
RewriteRule ^.*$ https://%1/$1 [R=301,L]

Dadurch wird "google.com" von "www.google.com" in "% 1" erfasst, der Rest in "1" und danach die "2", wenn HTTP_Host mit "www" (mit oder ohne https) beginnt.

18
Fabian

Ref: Apache leitet WWW zu nicht-WWW und HTTP zu HTTPS um

http://example.com

http://www.example.com

https://www.example.com

zu

https://example.com

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

Wenn anstelle von example.com die Standard-URL www.example.com sein soll, ändern Sie einfach die dritte und die fünfte Zeile:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} !^www\. [NC]
RewriteCond %{HTTP_Host} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]
8
Chanuka Asanka

Um non-www und https in einer einzelnen Anforderung durchzusetzen, können Sie die folgende Regel in Ihrem htaccess verwenden:

RewriteEngine on

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

Dies leitet http://www.example.com/ oder https://www.example.com/ an ssl non-www https weiter: //example.com/.

Ich benutze das R Temp-Redirect-Flag zum Testen und um Browser-Caching zu vermeiden. Wenn Sie die Weiterleitung dauerhaft machen möchten, ändern Sie einfach das Flag R in R = 301.

7
starkeen

Das Zertifikat muss sowohl www als auch nicht-www https abdecken. Die Zertifikate einiger Anbieter decken beide für www.xxxx.yyy ab, aber nur eines für xxxx.yyy.

Schreibe ein:

RewriteEngine On

Alle HTTP-Adressen sollten https verwenden:

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://xxx.yyy/$1 [L,R=301]

Stellen Sie nur www https ein, verwenden Sie das nicht-www https:

RewriteCond %{SERVER_PORT} 443
RewriteCond %{HTTP_Host} ^www[.].+$
RewriteRule ^(.*)$ https://xxxx.yyy/$1 [L,R=301]

Kann keine anderen als www-https verarbeiten, andernfalls tritt eine Schleife auf.

In [L, R = 301]:

  1. L = Wenn die Regel verarbeitet wurde, bearbeiten Sie sie nicht mehr.
  2. R = 301 = Weist Browser/Roboter an, eine permanente Weiterleitung durchzuführen.

Mehr generisch

Ein generischerer Ansatz - nicht portabhängig - ist:

RewriteCond %{HTTP_Host} ^www\.
RewriteRule ^(.*)$ https://xxxx.yyy/$1 [R=301,QSA]

um eine beliebige URL mit www abzulegen,.

RewriteCond %{HTTPS} !on
RewriteCond %{HTTPS} !1
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTP:X-Forwarded-SSL} !on
RewriteRule ^(.*)$ https://xxxx.yyy/$1 [R=301,QSA]

um nicht-https-URLs zu erzwingen, verwenden Sie https, auch wenn diese Systeme Lastabgleichern folgen, die https ablegen.

Beachten Sie, dass ich die forwarded-Optionen nicht getestet habe. Ich würde mich daher über Feedback zu allen Problemen freuen. Diese Zeilen könnten ausgelassen werden, wenn sich Ihr System nicht hinter einem Load-Balancer befindet.

TO HTTP_Host oder nicht

Sie können ${HTTP_Host} verwenden, um Teil der URL in der RewriteRule zu sein, oder Sie können Ihren expliziten kanonischen Domänennamentext (xxxx.yyy oben) verwenden.

Durch die Angabe des Domänennamens wird explizit sichergestellt, dass in der vom Benutzer angegebenen URL keine geringfügigen Zeichen zur Beugung von Zeichen verwendet werden, um Ihre Website möglicherweise dazu zu bringen, etwas zu tun, auf das sie möglicherweise nicht vorbereitet ist, oder zumindest sicherzustellen, dass der richtige Domänenname angezeigt wird in der Adressleiste, unabhängig davon, welche URL-Zeichenfolge die Seite geöffnet hat.

Es kann sogar helfen, punycode-kodierte Domänen so zu konvertieren, dass die richtigen Unicode-Zeichen in der Adressleiste angezeigt werden.

5
Patanjali

Das hat für mich funktioniert:

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_Host} ^www\.(.*)
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
2
Mike Gifford
RewriteEngine On

RewriteCond %{HTTP_Host} ^www\.(.*)
RewriteRule ^.*$ https://%1/$1 [R=301,L]

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R,L]

Dies funktionierte für mich nach vielem Ausprobieren. Der erste Teil stammt vom Benutzer und wird www.xxx.yyy erfassen und an https: //xxx.yyy senden.

Teil 2 betrachtet die eingegebene URL und prüft, ob HTTPS an HTTPS gesendet wird

In dieser Reihenfolge erfolgt die Logik und es tritt kein Fehler auf.

HIER ist meine FULL-Version in WordPress:

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

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R,L]


# 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
1
Peter Humphrey

Für mich war es besser, "example.com" als Zeichenfolge zu codieren, daher brauche ich weniger Regeln, sogar Sie können es verwenden, um von .org zu .com oder ähnlichem umzuleiten:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_Host} !^example\.com$ [NC]
  RewriteRule ^ https://example.com%{REQUEST_URI} [L,NE,R=301]
</IfModule>
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} ^www\. [NC]
RewriteCond %{HTTP_Host} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]

Das funktioniert bei mir einwandfrei!

0
Roga Men