airler
Goto Top

Redirect Problem bei IIS 7.5 und PHP

Einen schönen guten Abend,

ich hoffe ihr könnt mir helfen, da ich zur Zeit mit dem Problem nicht mehr weiterkomme.

Es geht darum das ich einen IIS (war Anforderung) habe auf dem ich zusätzlich noch PHP installiert habe um eine PHP Anwendung zum laufen zu bringen.
Die PHP Anwendung arbeitet mit Weiterleitungen, zum Beispiel wenn man die Seite aufruft und noch nicht eingeloggt ist wird man zuerst auf die Login Seite weitergeleitet.
Dies klappt auf einem Apache Server auch ohne Probleme nur auf dem IIS macht das ganze zicken...

Und zwar ergibt sich das Phänomen, das man bei Aufruf der Seite dann wie folgt "weitergeleitet" wird:
Aufruf von http://sub.domain.de leitet auf http://sub.domain.de\/login.php weiter. (Ergebnis aus Firefox
Derselbe Aufruf im IE und einigen anderen Browsern ruft http://sub.domain.de//login.php hervor.

Die zweite Variante sorgt zwar schon dafür, das der Besucher auf der Webseite landet, aber schön ist sowas trotzdem nicht, viel mehr Kopfzerbrechen bereitet mir allerdings die erste Variante. Diese sorgt - wen wunderts - für einen Seitenladefehler...

Das Script, das für die Weiterleitung verantwortlich ist sieht wie folgt aus:
<?php
	session_start();
	
	$hostname = $_SERVER['HTTP_HOST'];  
	$path = dirname($_SERVER['PHP_SELF']);  
	$script = $_SERVER['PHP_SELF'];  
	
	if (isset($https) && ($https == true)) {
		$protocol = 'https';  
	} else {
		$protocol = 'http';  
	}
	
	if (!isset($_SESSION["username"]) || !$_SESSION['username'])  
	{
		header('Location: '.$protocol.'://'.$hostname.($path == '/' ? '' : $path).'/login.php'.($script == '/index.php' ? '' : '?ref='.$script));  
	}
?>

Eine kurze Erläuterung: ich hole mir zunächst das aufgerufene Script, den Pfad und den Hostnamen und leite den Besucher je nach Einstellung auf die http bzw. die https Seite weiter.

Im IIS habe ich "keine" weiteren Einstellungen bezüglich Rules, Redirects etc. gemacht, die mir das Verhalten evtl. erklären würden.

Hat einer von Euch vielleicht eine Idee woran das liegen könnte? Bzw. sogar eine Lösung?
Vielen Dank für Tipps im voraus!!!!

Schöne Grüße,
Torben

EDIT: IIS Version 7.5

Content-Key: 220466

Url: https://administrator.de/contentid/220466

Printed on: April 25, 2024 at 04:04 o'clock

Member: Airler
Airler Oct 26, 2013 at 18:01:54 (UTC)
Goto Top
Es ist zwar mehr ein Workaround aber mit der folgenden Änderung im Code funktioniert die Umleitung erfolgreich.
Dabei werden Doppelslash und Backslash-Slash Kombinationen durch einen einfachen Slash ersetzt:
//...
        if (!isset($_SESSION["username"]) || !$_SESSION['username'])  
	{
		$search_ary = array('\/', '//');  
		$url = $hostname.($path == '/' ? '' : $path).'/login.php'.($script == '/index.php' ? '' : '?ref='.$script);  
		$url = str_replace($search_ary, '/', $url);  
		header('Location: '.$protocol.'://'.$url);  
	}

Schöne Grüße,
Torben