it-swarm.dev

Sie müssen den gesamten Datenverkehr zu https umleiten

Ich möchte den Datenverkehr umleiten, der nach http://example.com nach https://example.com geht.

gleiches für http://example.com/about bis https://example.com/about

Ich dachte, es wäre ungefähr so:

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

Das funktioniert für mich:

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI}

Wenn der Datenverkehr über Nicht-SSL-HTTP kommt, leiten Sie die HTTP-Entsprechung der Seite weiter, auf die der Benutzer ursprünglich zugreifen wollte. Es enthält auch keine mod_rewrite-Optionen, daher ist es einfach zu lesen.

Nebenruf: Warum haben alle das Bedürfnis, den HTTP-Code der Weiterleitung explizit festzulegen und eine ihrer Umschreibungen als die "letzte" zu markieren? Im Ernst, ich habe in den letzten Tagen Dutzende von gleich aussehenden Zugriffsregeln gesehen.

64
Borealid

Dies ist eine vorherige Antwort, die .httaccess verwendet, aber in den Kommentaren vorgeschlagene Änderungen hinzugefügt, und einige von mir:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://my.domain.name%{REQUEST_URI} [L,R=301]

Anmerkungen:

  • Dies gilt für Fälle, in denen der Benutzer keinen Zugriff auf die Hauptkonfiguration, jedoch Zugriff auf die .htaccess-Regeln hat. Wenn Sie Zugriff auf die Hauptkonfiguration haben, verwenden Sie stattdessen mod_alias solution .
  • Für mich wurde die Regel nicht übernommen, ohne RewriteBase zu definieren. Durch das explizite Definieren wird mit einigen Server-Setups die Mehrdeutigkeit beseitigt.
  • Zumindest in einigen Konfigurationen ist %{HTTPS} bei Verwendung von http nicht auf off gesetzt, sondern ist null, sodass !on eine zuverlässigere Regel als off ist.
  • Für den expliziten Hostnamen ist der clientseitige Hostheader oder die Serverkonfiguration nicht erforderlich. Der explizite Hostname setzt jedoch natürlich voraus, dass nur eine Domäne umgeleitet wird. Der Hostheader wirft einige erhebliche Probleme auf, z. B. das Portieren und vom Client bereitgestellte Daten. Eine andere von Apache Wiki vorgeschlagene Alternative ist die Verwendung von %{SERVER_NAME}. Wenn Sie dies in Betracht ziehen, überprüfen Sie die Warnung von dieser Diskussion - es setzt voraus, dass die andere Konfiguration korrekt ist.
  • R=301 bedeutet, dass es eine permanente Weiterleitung ist, wie es in diesem Fall normalerweise vorgesehen ist. Wenn Sie sich jedoch für temporär halten, kann dies weggelassen oder als R=302 angegeben werden.
  • L bedeutet, dass es die letzte für diese Anforderung anzuwendende Regel ist. Lassen Sie es, wenn Sie vermuten oder wissen, dass danach andere Regeln gelten, die Sie nicht anwenden möchten. Sie können entfernen, wenn dies die einzige Regel der Datei ist.
12
eis

Gemäß der Apache-Dokumentation ist die Verwendung von mod_alias für diese Aufgabe geeigneter als mod_rewrite. Um den gesamten HTTP-Verkehr auf HTTPS umzuleiten, würde man:

<VirtualHost *:80>
    ServerName www.example.com
    Redirect permanent / https://www.example.com/
</VirtualHost >

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost >

Zwei Dinge zu dieser Konfiguration zu beachten:

  1. Sie benötigen Zugriff auf die Konfigurationsdatei des Hauptservers, damit diese Konfiguration funktioniert. Die Direktive VirtualHost ist nur im Kontext "server config" gültig.
  2. Beachten Sie, dass mod_rewrite-Direktiven vor mod_alias-Direktiven verarbeitet werden. Wenn Sie bereits einen massiven Block von RewriteRules in Ihrer .htaccess-Datei haben, ist die mod_rewrite-Konfiguration möglicherweise besser geeignet.
7
t-richards

warum nicht einfach und einfach?

rewriteCond %{HTTPS} !on
rewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

es hat mir funktioniert und scheint mir klar zu sein. Prost.

1
Andres Felipe

Das Arbeiten unter allen Bedingungen ist:

<IfModule mod_rewrite.c>
RewriteEngine On

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

<IfModule>
0

Nach einigem Nachdenken funktionierte das bei mir etwas anders.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
0