Bedingte Umleitung von Apache HTTP zu HTTPS

Bedingte Umleitung von Apache HTTP zu HTTPS

alle. Ich habe ein Syntaxproblem. Ich habe versucht, anderen Quellen zu folgen, aber es funktioniert einfach nicht.

Ich habe erfolgreich eine unbedingte HTTP-zu-HTTPS-Umleitung erstellt. Gehe zuhttp://www.robjvargas.com, landen bei HTTPS. Alles schön und gut.

Aber jetzt scheint mein Zertifikat HTTP zu benötigen. Es verwendet Let’s Encrypt und muss daher alle 90 Tage erneuert werden. Mit der Umleitung schlägt ein Probelauf fehl. Mit deaktivierter Umleitung ist der Probelauf erfolgreich.

Daher habe ich versucht, ein RewriteCond einzufügen, um den Verkehr zur Zertifikatserneuerung auszunehmen:

# HTTP to HTTPS redirect
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{Request_URI} !^./acme-challenge/*
RewriteRule (.*) https://www.robjvargas.com$1 [R,L]

Nur funktioniert es nicht. Ich glaube, ich übersehe etwas, das einen Schlag auf die Stirn wert wäre, wenn ich es sehe, aber ich sehe es nicht. Mit dem obigen Code scheint die Umleitung von HTTP zu HTTPS immer noch universell zu sein. Also ist die RewriteCond eindeutig falsch. Der Punkt vor der URI ist wahrscheinlich falsch, aber ich habe es sowohl mit als auch ohne versucht.

Ich habe auch die vollständige URI in RewriteCond eingefügt, aber das hat sie auch nicht ausgenommen.

Ich bin nah dran. Ich bekomme keine Fehler. Es erfüllt einfach nie den beabsichtigten Zustand.

Was vermisse ich?

Antwort1

Aber jetzt scheint mein Zertifikat HTTP zu benötigen.

Das ist nicht ganz richtig. Ich persönlich verlängere über https. Damit das funktioniert, müssen Sie jedoch sicherstellen, dass der Zugriff auf die Challenge-URI in Ihrem https-VirtualHost zugelassen ist, indem Sie den entsprechenden Teil vom http-VirtualHost kopieren. Wenn Sie das nicht können oder wollen, erfahren Sie hier, wie Sie es mit der bedingten Umleitung, die Sie gerade schreiben, über http zum Laufen bringen.

Das Problem ist, dass Ihr aktueller regulärer Ausdruck mit der Challenge-URI übereinstimmen würde. Laut derApache-Dokumenteder REQUEST_URI beginnt mit /, daher sollten Sie nach der Challenge-URI wie folgt suchen: ^\/\.well-known\/.*$. Dies entspricht der Challenge-URI (http://example.com/.bekannt/acme-challenge).

Alles zusammen:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^\/\.well-known\/.*$
RewriteRule (.*) https://www.robjvargas.com/$1 [R,L]

Bei zukünftigen Problemen verwenden Sie Folgendes:htaccess-Tester

Antwort2

Auf meinem Virtualmin-Server hat die folgende Zeile den Trick getan.

RedirectMatch ^/(?!.well-known)(.*)$ https://phpmyadmin.example.com/$1

verwandte Informationen