Chyba v RequestFactory u IIS7
- Senfix
- Člen | 8
Ahoj,
zprovoznuji si z určitých důvodů IIS server přes VirtualBox v Linuxu a narazil jsem na jeden problem při spuštěí aplikace.
Jenom pro úplnost používám Windows 2008 IIS 7 PHP 5.5 a Nette 2.1.2
Při vstupu na web mi docházelo k redirection loop takže jsem hledal a hledal a našel jsem že IIS mi neposílá všechny informace tak jak nette předpokládá. V RequestFactory jsem našel kod
<?php
// path & query
if (isset($_SERVER['REQUEST_URI'])) { // Apache, IIS 6.0
$requestUrl = $_SERVER['REQUEST_URI'];
} elseif (isset($_SERVER['ORIG_PATH_INFO'])) { // IIS 5.0 (PHP as CGI ?)
$requestUrl = $_SERVER['ORIG_PATH_INFO'];
if (isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING'] != '') {
$requestUrl .= '?' . $_SERVER['QUERY_STRING'];
}
} else {
$requestUrl = '';
}
?>
Problémem bylo že v REQUEST_URI se nenalézal query string takže mi nette dělalo redirect na základě kanonizace.
Problém jsem pořašil následující berličkou kdy případně query string přidám.
<?php
// path & query
if (isset($_SERVER['REQUEST_URI'])) { // Apache, IIS 6.0
$requestUrl = $_SERVER['REQUEST_URI'];
if (isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING'] != '') { //broken IIS request uri
if(strpos($_SERVER['REQUEST_URI'], $_SERVER['QUERY_STRING']) === FALSE){
$requestUrl .= '?' . $_SERVER['QUERY_STRING'];
}
}
} elseif (isset($_SERVER['ORIG_PATH_INFO'])) { // IIS 5.0 (PHP as CGI ?)
$requestUrl = $_SERVER['ORIG_PATH_INFO'];
if (isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING'] != '') {
$requestUrl .= '?' . $_SERVER['QUERY_STRING'];
}
} else {
$requestUrl = '';
}
?>
Otázkou je jestli by se todle nemělo dostat do veřejného Nette nebo je to jen mnou špatně nastaveným IIS serverem. Každopádně by to mohlo někomu ušetřit spoustu práce při hledání.
Editoval Senfix (24. 8. 2014 20:49)
- Filip Procházka
- Moderator | 4668
A to nejde nastavit přímo v tom http serveru, aby to neposílal phpku takhle retardovaně?