it-swarm.com.de

htaccess Weiterleitung an https: // www

Ich habe den folgenden Htaccess-Code:

<IfModule mod_rewrite.c>

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

</IfModule>

Ich möchte, dass meine Website mit HTTPS zu https://www. umgeleitet wird und die www.-Unterdomäne erzwingt, Wenn ich jedoch auf http://www. (ohne HTTPS) zugreifen, leite ich mich nicht mit HTTPS an https://www um.

269
bigben

Um HTTPS zuerst erzwingen zu können, müssen Sie die korrekte Umgebungsvariable %{HTTPS} off überprüfen. In der obigen Regel wird jedoch www. vorangestellt. Da Sie eine zweite Regel zur Durchsetzung von www. haben, verwenden Sie sie nicht in der ersten Regel.

RewriteEngine On
RewriteCond %{HTTPS} off
# First rewrite to HTTPS:
# Don't put www. here. If it is already there it will be included, if not
# the subsequent rule will catch it.
RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
# Now, rewrite any request to the wrong domain to use www.
# [NC] is a case-insensitive match
RewriteCond %{HTTP_Host} !^www\. [NC]
RewriteRule .* https://www.%{HTTP_Host}%{REQUEST_URI} [L,R=301]

Über Proxying

Hinter einigen Formen des Proxyings, bei denen der Client über HTTPS eine Verbindung zu einem Proxy, einem Lastverteiler, einer Passagieranwendung usw. herstellt, kann die Variable %{HTTPS} niemals on sein und eine Überschreibungsschleife verursachen. Dies liegt daran, dass Ihre Anwendung tatsächlich nur HTTP-Datenverkehr empfängt, obwohl der Client und der Proxy/Load-Balancer HTTPS verwenden. Überprüfen Sie in diesen Fällen den X-Forwarded-Proto-Header anstelle der %{HTTPS}-Variablen. Diese Antwort zeigt den entsprechenden Prozess

564

Michals Antwort funktionierte für mich, wenn auch mit einer kleinen Modifikation:

Problem:  

wenn Sie über ein Sicherheitszertifikatsingle siteverfügen, ein Browser, der versucht, ohne https: // www auf Ihre Seite zuzugreifen. (oder was auch immer die Domäne ist, die Ihr Zertifikat abdeckt) zeigt einen unschönen roten Warnbildschirm an , bevor die Weiterleitung zur sicheren und richtigen https-Seite empfangen wird.

Lösung

Verwenden Sie zuerst die Weiterleitung zum WWW (oder die von Ihrem Zertifikat abgedeckte Domäne), und führen Sie dann nur die HTTPS-Weiterleitung durch. Dadurch wird sichergestellt, dass Ihre Benutzer nicht mit Fehlern konfrontiert werden, da Ihrem Browser ein Zertifikat angezeigt wird, das die aktuelle URL nicht abdeckt.

#First rewrite any request to the wrong domain to use the correct one (here www.)
RewriteCond %{HTTP_Host} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_Host}%{REQUEST_URI} [L,R=301]

#Now, rewrite to HTTPS:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
136
Larzan

Wenn Sie CloudFlare oder ein ähnliches CDN verwenden, erhalten Sie mit den hier bereitgestellten% {HTTPS} -Lösungen einen unendlichen Schleifenfehler. Wenn Sie ein CloudFlare-Benutzer sind, müssen Sie Folgendes verwenden:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
93
Andrew

Schlechte Lösung und warum!

Verwenden Sie niemals die oben genannte Lösung, denn wenn Sie ihren Code verwenden, bedeutet dies Folgendes:

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

RewriteCond %{HTTP_Host} !^www\. [NC]
RewriteRule .* https://www.example.com%{REQUEST_URI} [L,R=301]

Der Browser geht an:

http://example.com

Dann Weiterleitungen an:

https://example.com

Dann Weiterleitungen an: 

https://www.example.com

Dies ist zu viel request an den Server


BESTE LÖSUNG UND DIE ANTWORT

Dieser Code hat eine [OR]-Bedingung, um doppelte Änderungen an der URL zu verhindern!

RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} !^www\. [NC]
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [R=301,L]

Die meisten Antworten wurden sogar akzeptiert, verwenden Sie diesen Trick nicht.

44
Amir Forsati

Dies ist der beste Weg, den ich für Proxy- und nicht für Proxy-Benutzer gefunden habe

RewriteEngine On

### START WWW & HTTPS

# ensure www.
RewriteCond %{HTTP_Host} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_Host}%{REQUEST_URI} [L,R=301]

# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]

### END WWW & HTTPS
30
llioor

Es gibt viele Lösungen. Hier ist ein Link zum Apache-Wiki, das sich direkt mit diesem Problem befasst.

http://wiki.Apache.org/httpd/RewriteHTTPToHTTPS

RewriteEngine On
# This will enable the Rewrite capabilities

RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same location but using HTTPS.
# i.e.  http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in httpd.conf
# or .htaccess context
25
Vynz

Um http: // oder https: // zu https: // www umzuleiten, können Sie die folgende Regel in allen Apache-Versionen verwenden:

RewriteEngine on

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} !^www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]

Apache 2.4

RewriteEngine on

RewriteCond %{REQUEST_SCHEME} http [OR]
RewriteCond %{HTTP_Host} !^www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]

Beachten Sie, dass die Variable% {REQUEST_SCHEME} seit Apache 2.4 verwendet werden kann.

10
starkeen

Wenn Sie mit CloudFlare arbeiten, stellen Sie sicher, dass Sie so etwas verwenden. 

# BEGIN SSL Redirect
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
</IfModule>
# END SSL Redirect

Dies erspart Ihnen die Umleitungsschleife und leitet Ihre Site sicher zu SSL um. 

P.S. Es ist eine gute Idee, die mod_rewrite.c zu überprüfen!

8
Ahmad Awais

Ich versuche die erste Antwort und es funktioniert nicht ..... Diese Arbeit:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{ENV:HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{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
0
Jackssn
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://%{HTTP_Host}%{REQUEST_URI} [L,R]
RewriteEngine On
RewriteCond %{HTTP_Host} !^www.
RewriteRule ^(.*)$ https://www.%{HTTP_Host}/$1 [R=301,L]

Hinweise: Stellen Sie sicher, dass Sie die folgenden Schritte ausgeführt haben

  1. Sudo a2enmod umschreiben
  2. Sudo-Dienst Apache2 neu starten
  3. Fügen Sie Folgendes in Ihrer vhost-Datei unter /etc/Apache2/sites-available/000-default.conf hinzu
<Directory /var/www/html>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  allow from all
  Require all granted
</Directory>

Jetzt funktioniert Ihr .htaccess und Ihre Site wird zu http: // zu https: // www umgeleitet.

0
Kundan roy

Legen Sie in Ihrer .htaccess-Datei fest

RewriteEngine On
RewriteCond %{HTTP_Host} !^www.
RewriteRule ^(.*)$ https://www.%{HTTP_Host}/$1 [R=301,L]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
0
Adam Kozlowski