private function fixUpRequestUriAndQueryString() { /** @var $context HttpContext */ $context = $this->context; $queryString = $context->getServer()->get("QUERY_STRING"); $requestUri = $context->getServer()->get("REQUEST_URI"); $redirectStatus = $context->getServer()->get("REDIRECT_STATUS"); //try to fix REQUEST_URI under IIS $arProtocols = array('http', 'https'); foreach ($arProtocols as $protocol) { $marker = "404;" . $protocol . "://"; if (($p = strpos($queryString, $marker)) !== false) { $uri = $queryString; if (($p = strpos($uri, "/", $p + strlen($marker))) !== false) { if ($requestUri == '' || $requestUri == '/404.php' || strpos($requestUri, $marker) !== false) { $requestUriTmp = substr($uri, $p); if (!Uri::isPathTraversalUri($requestUriTmp)) { $requestUri = $requestUriTmp; } } $redirectStatus = '404'; $queryString = ''; break; } } } $requestUri = urldecode($requestUri); $requestUri = \Bitrix\Main\Text\Encoding::convertEncodingToCurrent($requestUri); $sefApplicationCurPageUrl = $context->getRequest()->get("SEF_APPLICATION_CUR_PAGE_URL"); if ($redirectStatus == '404' || $sefApplicationCurPageUrl != null) { if ($redirectStatus != '404') { if (!Uri::isPathTraversalUri($sefApplicationCurPageUrl)) { $requestUri = $sefApplicationCurPageUrl; } } if (($pos = strpos($requestUri, "?")) !== false) { $queryString = substr($requestUri, $pos + 1); } } if ($queryString != $context->getServer()->get("QUERY_STRING") || $requestUri != $context->getServer()->get("REQUEST_URI") || $redirectStatus != $context->getServer()->get("REDIRECT_STATUS")) { $context->rewriteUri($requestUri, $queryString, $redirectStatus); } }