Erzwingen von SSL und www in .htaccess


11

Ich suche nach einer Möglichkeit, SSL und zu erzwingen www.

Ich konnte beide getrennt erzwingen, aber zusammen stoße ich immer wieder auf Umleitungsprobleme. Der folgende Code funktioniert beim Umgang mit einer URL in diesem Format: http://example.comund leitet ordnungsgemäß weiter, https://www.example.comaber wenn die eingehende URL lautet https://example.com, wird sie nicht weitergeleitet an https://www.example.com- Irgendwelche Vorschläge?

EDIT: sollte es auch senden http://www.example.coman https://www.example.com.

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HTTP_HOST} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Antworten:


7

Die erste Zeile wird verwendet, um zu verhindern, dass interne URLs neu geschrieben werden. Das könnte dazu führen, dass verschiedene Seiten angezeigt werden. Deshalb habe ich sie entfernt.

Wenn der Host example.comüber HTTPS angefordert wird oder nicht, wird er in neu geschrieben https://example.com/. Dh, es umschreibt http://example.com, http://www.example.comund https://example.comzu https://www.example.comin einer gemeinsamen Aktion.

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Dokumentation zu mod_rewrite für Apache 2.2 .

Wenn Sie Subdomains mögen forum.example.com, sollte die erste Regel so sein, wie sie ist. Andernfalls können Sie auch ein negatives Match gegen durchführen www.example.com.



0

Versuche dies:

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80 [OR]
RewriteCond %{HTTP_HOST} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

0

Sie können auch die folgenden Zeilen verwenden, die ich verwende und einwandfrei arbeite.

(Entfernen Sie die obere RewriteCond, wenn Sie CloudFlare nicht verwenden.)

RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [OR]
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=302]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=302]

0

Habe dies gerade für meine Seite implementiert. Klappt wunderbar! Oben in meiner .htaccess-Datei hinzugefügt. Leitet alle Instanzen von Personen um, die www oder nicht www, http oder https eingeben.

# BEGIN HTTPS Redirect
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
# END HTTPS Redirect

0

Ich habe alle oben genannten Vorschläge getestet, aber keiner deckte das gesamte Szenario ab.

Ich wollte, dass alle Besucher gehen https://www.example1.com/

Einige der von anderen Benutzern bereitgestellten Codes haben dazu beigetragen, nicht sichere und / oder nicht www-URLs zu verwenden https://www.example1.com/, aber keiner von ihnen wurde abgedeckt https://example1.com, um auch in "www" konvertiert zu werden.

Ich habe meine Website mit GoDaddy gehostet, falls dies einen Unterschied macht.

Dies ist der Code, der für mich funktioniert hat:

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

Die letzte Zeile könnte auch sein:

RewriteRule ^(.*)$ https://www.example1.com/$1 [R,L]

Aber ich habe den Code "301" verwendet, um die Nachricht " dauerhaft verschoben " zu senden, in der Hoffnung, dass Google und möglicherweise andere Suchmaschinen alte Links aktualisieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.