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]
Stephen
quelle

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.

Lekensteyn
quelle
0

Muss die dritte Zeile nicht sein:

RewriteCond %{HTTP_HOST} ^example\.com$
Piers Karsenbarg
quelle
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]
Arvin
quelle
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]
itteam
quelle
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
user67283
quelle
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.

onpre
quelle