Weiterleitung zu https => Schlosssymbol nicht vorhanden

DrBonsai

Mitglied
Hallo zusammen,

ich versuche auf ausgewählten Seiten auf https umzuleiten.
Klappt auch.
Das Problem ist, dass im Firefox (Version 30.0) das Schloss-Symbol nur während des Ladens der Seite angezeigt wird. Sobald die Seite geladen ist, wird da Symbol durch das "Warndreieck" ersetzt. Wenn ich meinbe Umleitungen ausstelle, tritt das Problem allerdings nicht auf. Es muss also an der Weiterleitung liegen.

Hat jemand eine Idee, woran es liegen könnte?

Hier mal mein Code

PHP:
/*SSL-Verbindung in checkout, sellercentral und kundenbackend aufrufen, in online-version*/
if((strpos($_SERVER['REQUEST_URI'], "checkout.php") > 0 or strpos($_SERVER['REQUEST_URI'], "clients.php") > 0 or strpos($_SERVER['REQUEST_URI'], "seller.php") > 0 or strpos($_SERVER['REQUEST_URI'], "?popup=anmelden") > 0) and !isset($_SERVER['HTTPS']) and substr($_SERVER['HTTP_HOST'],0,4) != "127.")
    {
    $url = str_replace("//", "/", str_replace("index.php", "", str_replace("www.", "", $_SERVER['HTTP_HOST'])."/".$_SERVER['REQUEST_URI']));
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: https://".$url);
    exit();
    }

Das Problem in Aktion: damado.de/seller.php?popup=anmelden

Vielen Dank und schönes Wochenende!

David
 
Hi

"Fehler: Umleitungsfehler
Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann."

Zum beschriebenen Problem:
Vermutlich hast du irgendwo absolute Pfade drin, dass also auch von der https-Seite
etwas mit http geladen wird (Bilder, JS, ...)
 
Hi,

um genau zu sein hast du ein HTTP GET auf http://www.damado.de/ der beim Aufruf ausgeführt wird.

Bilder, JS und CSS sehen auf den ersten blick gut aus. Deine Weiterleitung funktioniert aber auf jeden fall nicht.

Rufst du https://damado.de/seller.php?popup=anmeld auf auf folgt auf die Anfrage GET https://damado.de/ ein 301 und auf den GET http://damado.de/ ein 200 OK
Bei http genau umgekehrt.
Wie ein GET Request auf http://www.damado.de/

Durch diese Weiterleitung, die ich nicht verstehe, lädst du wie sheel schon sagte in einer SSL Sitzung Daten unverschlüsselt. Davor warnt dich der Firefox.

Hol dir mal die Extension Firebug und schau im Reiter Netzwerk nach, was da so geladen wird und versuch deine Weiterleitung in den griff zu bekommen.

Solltest du Hilfe bei der Weiterleitung brauchen, poste bitte, wie genau du die Weiterleitung konstruiert hast.

VG
Nino
 
Hallo Nino14 und sheel!

Danke für Eure Hinweise.

Ich lade eigentlich keine http-Inhalte.... Dachte ich zumindest. Es ist tatsächlich so, dass Am Ende des Ladevorgangs aus einem Grund, den ich leider auch nicht verstehe, einmal http://www.damado.de geladen wird.

Im Detail habe ich meine Weiterleitung folgendermaßen aufgebaut:

1) Definition der Seiten, die ssl-verschlüsselt werden sollen
PHP:
/*Seiten für SSL-Verbndiung definieren*/
$ssl_topic = array (
           "clients.php",
           "seller.php",
           "checkout.php",
           );

$ssl_popup = array (
           "anmelden",
           "bestellen_als",
           "registrieren",
           "passwort-vergessen",
           "haendler-werden",
           );

if(in_array($php_doc, $ssl_topic) or (isset($_REQUEST['popup']) and in_array($_REQUEST['popup'], $ssl_popup))) /*Wenn das Topic ein SSL-Topic ist*/
   {
   $ssl_secured = true;
   }
   else
     {
     $ssl_secured = false;
     }

#var_dump($ssl_secured);

Ich will nicht alle Seiten verschlüsseln, weil es tatsächlich häufig vorkommen kann, dass externe Inhalte über http angezeigt werden. Auf den Seiten, die ich SSL-verschlüssele, werden diese Inhalte (Bilder) einfach nicht geladen. Aber das soll ja die Ausnahme bleiben. Deshalb verschlüssele ich nicht alles über SSL.

2) Weiterleiten aller SSL-Seiten zu https, falls sie noch nicht über https geladen werden
PHP:
/*SSL-Verbindung in checkout, sellercentral, Kundenbackend und ausgewählten Popups aufrufen, in online-version*/
if($ssl_secured == true and !isset($_SERVER['HTTPS']) and substr($_SERVER['HTTP_HOST'],0,4) != "127.")
   {
   $url = str_replace("//", "/", str_replace("index.php", "", $_SERVER['HTTP_HOST']."/".$_SERVER['REQUEST_URI']));
   header("HTTP/1.1 301 Moved Permanently");
   header("Location: https://".$url);
   exit();
   }

3) Weiterleiten aller nicht SSL-Seiten zu http.
PHP:
/*zurück zu nicht-ssl-Verbidnung, in online-version*/  
if(isset($_SERVER['HTTPS']) and $ssl_secured == false and substr($_SERVER['HTTP_HOST'],0,4) != "127.")
   {
   $url = str_replace("//", "/", str_replace("index.php", "", $_SERVER['HTTP_HOST']."/".$_SERVER['REQUEST_URI']));
   header("HTTP/1.1 301 Moved Permanently");
   header("Location: http://".$url);
   exit();
   }

Ich könnte jetzt hingehen und $ssl_topic noch "index.php" hinzufügen. Wenn ich das mache, wird zum Schluss nicht http://www.damado.de geladen, sondern https://www.damado.de und dann macht die Wetierleitung das, was sie soll. das möchte ich aber vermeiden, weil ich
  1. das Problem dann immer noch nicht verstehe (Wieso wird am Ende des Ladevorgangs nochmal https://www.damado.de geladen? Dass dann ein 301 zurückkomt ist klar. Das liegt daran, dass index.php aktuell eben nicht ssl-verschlüsselt werden soll.)
  2. keine Lust habe, dass auf der Startseite irgendwelche externen Inhalte nicht geladen werden.
  3. noch ein weiteres Problem mit android habe, nämlich, dass in alten android-Versionen meine SSL-Seite gar nicht angezeigt werden. Wenn ich jetzt die Startseite SSL-verschlüssele, kann man damado gar nicht mehr über android aufrufen.
Habt Ihr zu Frage 1 eine Idee? Wenn ich das löse und verstehe ist das Problem erledigt.

Vielen Dank und viele Grüße,

David
 
Zurück