it-swarm.com.de

Leiten Sie HTTP auf dem virtuellen Standardhost ohne Servername zu HTTPS um

Auf meinem Apache-Server möchte ich alle eingehenden http-Anfragen an die entsprechende https-Anfrage umleiten können. Der Haken ist, dass ich dies für meinen virtuellen Standardhost tun möchte, ohne ServerName anzugeben, und die Umleitung mit dem Servernamen arbeiten lassen möchte, der in der Anforderungs-URL aufgeführt ist. Ich hoffe auf so etwas:

NameVirtualHost *:80
<VirtualHost *:80>
    RedirectPermanent / https://%{SERVER_NAME}/
    ...
</VirtualHost>

Ist dies mit Redirect möglich oder muss ich auf Rewrite zurückgreifen?

66

Versuchen Sie, dies in Ihrer vhost-Konfiguration hinzuzufügen:

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

Beides funktioniert gut. Aber laut Apache docs solltest du vermeiden mod_rewrite für einfache Weiterleitungen, und verwenden Sie stattdessen Redirect . Deshalb sollten Sie nach eigenen Angaben vorzugsweise Folgendes tun:

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

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

Der Erste / nachdem Redirect die URL ist, ist der zweite Teil, wo es umgeleitet werden soll.

Sie können es auch verwenden, um URLs zu einer Unterdomäne umzuleiten: Redirect /one/ http://one.example.com/

82
orszaczky

Dies ist die vollständige Möglichkeit, auch nicht benötigte Weiterleitungen wegzulassen;)

Diese Regeln sollen in .htaccess-Dateien verwendet werden, da eine RewriteRule in einem *: 80 VirtualHost-Eintrag keine Bedingungen benötigt.

RewriteEngine on
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^/(.*) https://%{HTTP_Host}/$1 [NC,R=301,L]

Erläuterungen:

RewriteEngine on

==> Motor überhaupt einschalten

RewriteCond %{HTTPS} off [OR]

==> Übereinstimmung bei nicht-https Verbindungen, oder (wenn Sie nicht [ODER] setzen, wird ein implizites UND erzeugt!)

RewriteCond %{HTTP:X-Forwarded-Proto} !https

==> Übereinstimmung bei weitergeleiteten Verbindungen (Proxy, Loadbalancer usw.) ohne https

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

==> Wenn eine der beiden Bedingungen zutrifft, schreiben Sie die gesamte URL neu und senden Sie eine 301, damit der Client dies "lernt" (manche tun es, manche nicht) und das L für die letzte Regel.

35
Jimmy Koerting