Symfony\Component\HttpFoundation\Request::prepareRequestUri PHP Method

prepareRequestUri() protected method

Code subject to the new BSD license (http://framework.zend.com/license/new-bsd). Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
protected prepareRequestUri ( )
    protected function prepareRequestUri()
    {
        $requestUri = '';

        if ($this->headers->has('X_ORIGINAL_URL')) {
            // IIS with Microsoft Rewrite Module
            $requestUri = $this->headers->get('X_ORIGINAL_URL');
            $this->headers->remove('X_ORIGINAL_URL');
            $this->server->remove('HTTP_X_ORIGINAL_URL');
            $this->server->remove('UNENCODED_URL');
            $this->server->remove('IIS_WasUrlRewritten');
        } elseif ($this->headers->has('X_REWRITE_URL')) {
            // IIS with ISAPI_Rewrite
            $requestUri = $this->headers->get('X_REWRITE_URL');
            $this->headers->remove('X_REWRITE_URL');
        } elseif ($this->server->get('IIS_WasUrlRewritten') == '1' && $this->server->get('UNENCODED_URL') != '') {
            // IIS7 with URL Rewrite: make sure we get the unencoded URL (double slash problem)
            $requestUri = $this->server->get('UNENCODED_URL');
            $this->server->remove('UNENCODED_URL');
            $this->server->remove('IIS_WasUrlRewritten');
        } elseif ($this->server->has('REQUEST_URI')) {
            $requestUri = $this->server->get('REQUEST_URI');
            // HTTP proxy reqs setup request URI with scheme and host [and port] + the URL path, only use URL path
            $schemeAndHttpHost = $this->getSchemeAndHttpHost();
            if (strpos($requestUri, $schemeAndHttpHost) === 0) {
                $requestUri = substr($requestUri, strlen($schemeAndHttpHost));
            }
        } elseif ($this->server->has('ORIG_PATH_INFO')) {
            // IIS 5.0, PHP as CGI
            $requestUri = $this->server->get('ORIG_PATH_INFO');
            if ('' != $this->server->get('QUERY_STRING')) {
                $requestUri .= '?'.$this->server->get('QUERY_STRING');
            }
            $this->server->remove('ORIG_PATH_INFO');
        }

        // normalize the request URI to ease creating sub-requests from this request
        $this->server->set('REQUEST_URI', $requestUri);

        return $requestUri;
    }

Usage Example

Example #1
0
 /**
  * {@inheritDoc}
  */
 protected function prepareRequestUri()
 {
     if (isset($_GET['q'])) {
         // Allow the router to correctly match paths
         $requestUri = '/' . $_GET['q'];
         $this->server->set('REQUEST_URI', $requestUri);
         // Query string is used by some request listeners for the
         // framework process process, with q= they will fail
         $queryString = $this->server->get('QUERY_STRING');
         $queryString = preg_replace('/q=[^&]*/', '', $queryString);
         if ($queryString && '&' === $queryString[0]) {
             if ('&' === $queryString) {
                 $queryString = '';
             } else {
                 $queryString = substr($queryString, 1);
             }
         }
         $this->server->set('QUERY_STRING', $queryString);
     } else {
         $requestUri = parent::prepareRequestUri();
     }
     return $requestUri;
 }