Example #1
0
 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);
     }
 }