it-swarm.com.de

Beschränken Sie den SSL-Zugriff für einige Pfade auf einem Apache2-Server

Ich wollte den Zugriff auf www.mydomain.com/login nur über SSL zulassen. ZB: Immer wenn jemand auf http: //www.mydomain.com/login zugreift, wollte ich, dass er zu https: // www umgeleitet wird .mydomain.com/login so ist es ihm/ihr unmöglich, ohne SSL auf diese Site zuzugreifen.

Ich habe dies erreicht indem die folgenden Zeilen zum virtuellen Host für www.mydomain.com auf Port 80 in /etc/Apache2/sites-available/default hinzugefügt wurden:

RewriteEngine   on
RewriteCond     %{SERVER_PORT} ^80$
RewriteRule     ^/login(.*)$ https://%{SERVER_NAME}/login$1 [L,R]
RewriteLog      "/var/log/Apache2/rewrite.log"

Jetzt möchte ich mit SSL einschränken für www.meinedomain.com. Das heißt, wenn jemand auf https: //www.meinedomain.com zugreift, möchte ich, dass er (aus Leistungsgründen) zu http: //www.meinedomain.com umgeleitet wird ).

Ich habe dies versucht, indem ich die folgenden Zeilen zum virtuellen Host von www.meinedomain.com auf Port 443 in /etc/Apache2/sites-available/default-ssl hinzugefügt habe:

RewriteEngine   on
RewriteCond     %{SERVER_PORT} ^443$
RewriteRule     ^/(.*)$ http://%{SERVER_NAME}/$1 [L,R]
RewriteLog      "/var/log/Apache2/rewrite.log"

Aber wenn ich jetzt versuche, auf www.mydomain.com/login zuzugreifen, erhalte ich eine Fehlermeldung, die der Server verursacht hat zu viele Weiterleitungen. Das ergibt doch Sinn. Offensichtlich spielen die beiden RewriteRules Ping-Pong gegeneinander.

Wie könnte ich das umgehen?

2
valmar

Wie wäre es mit:

RewriteCond $1 ^(login) [NC]
RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1

RewriteCond $1 !^(login) [NC]
RewriteRule ^(.*)$ http://%{SERVER_NAME}/$1 [L]

Ich hoffe (!), Dass das funktioniert - setzen Sie es in .htacess oder, wenn Sie vhosts verwenden, geht der erste Teil in den normalen vhost und das zweite Bit geht in den ssl vhost.

Es ist nicht erforderlich, 80/443 anzugeben, um eine Übereinstimmung (LOGIN oder Login) in der URL zu erzielen und die SSL zu erzwingen (oder nicht, wenn keine Übereinstimmung vorliegt).

Okay, hat nicht funktioniert

Bit hinzugefügt:

 RedirectMatch (?i)\/login https://www.example.com/login

In der Praxis (abhängig vom CMS) sind alle Ihre Site-Links ohnehin http, sodass Sie nur den einen RedirectMatch benötigen sollten.

2
ʍǝɥʇɐɯ