Ich denke, denke, dass ich dies sortiert habe (hauptsächlich dank der Frage Wie kann ich nicht-www ohne Hardcoding mit .htaccess umleiten?), aber ich kann es trotzdem nicht Ich verstehe ein paar Dinge völlig.
Ich möchte, dass alle Nicht-SSL-Verbindungen zu meinem Server nach SSL geroutet werden. Ich habe nur einen vhost (und das wird sicher für die Lebensdauer des Servers der Fall sein), aber ich möchte das Festcodieren des Domainnamens vermeiden, teilweise, damit die httpd.conf
-Dateien für Staging und Produktion identisch bleiben.
Ich weiß, dass ich Anfragen zur Verwendung von SSL mit einer mod_rewrite
-Regel wie
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
oder
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Ich habe jedoch zwei relativ einfache Fragen:
RewriteCond
-Anweisungen der anderen vorziehen? Vermutlich, wenn ich die %{SERVER_PORT}
-Variable verwende, würden etwaige Verbindungen an Port 8000 weiterhin im Klartext bereitgestellt. Gibt es einen Grund, warum ich es vermeiden sollte, die %{HTTPS}
-Variable zu verwenden, die ich übersehe?%{HTTP_HOST}
-Variable in der RewriteRule
-Anweisung respektiert und automatisch in dem Host:
-Header der Anforderung ersetzt? Gibt es einen Umstand, unter dem dies möglicherweise nicht funktioniert?Falls es einen Unterschied macht, betreiben wir Apache 2 auf RedHat mit mod_ssl
und die Site verwendete Drupal 7.
Tut mir leid für eine relativ dumme Frage. Apache sysadmin ist keinesfalls ein Kernbestandteil meines Jobs, also versuche ich mich so gut es geht durcheinander zu bringen. Danke alle!
Ich habe immer etwas wie das Folgende verwendet:
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Weil HTTP gelegentlich über andere Ports als 80 ausgeführt wird. Nun, ich mache das nicht gern, aber manchmal muss es usw.
%{HTTPS}
ist beispielsweise wahr, wenn SSL über Port 80 verwendet wird.
Ich denke, ich benutze normalerweise
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
%{HTTP_HOST}
ist immer das, was vom Client als Host:
-Header festgelegt wurde.
Mir fällt jedoch ein, dass es einen anderen Weg gibt, dies zu tun.
<VirtualHost *:80>
ServerName mysite.example.com
Redirect permanent/https://mysite.example.com/
</VirtualHost>
Sie werden feststellen, dass im obigen Block kein DocumentRoot vorhanden ist. Wenn Sie alles umleiten, benötigen Sie keines.
Wenn Sie nur ein wenig von Ihrer Site zu SSL umleiten möchten, können Sie einfach
tunRedirect permanent/secure https://mysite.example.com/secure
Ich denke, die Umleitungsoption ist für HTTPS-Forcen auf HTTPS-Basis vorzuziehen, da dies eine Stufe weniger Wahnsinn ist (wie von mod_rewrite so freundlich bereitgestellt).
Es könnte sogar schneller sein, da ein Modul weniger geladen/ausgeführt werden muss.