Управление URL-адресом $ _SERVER ['REQUEST_URI'] - PullRequest
1 голос
/ 27 октября 2011

Это мой URL: http://localhost/framework/index.php

echo $_SERVER['REQUEST_URI'];

Будет выводить: /framework/index.php

Но если мой URL был:

http://localhost/framework/

Вывод будет:

/framework/

И если я переместу файл, да, вы поняли.

Как получить содержимое после папки / в конечном итоге файла index.php? Моя идея - использовать index.php в качестве фронт-контроллера.

Если у меня есть:

http://localhost/framework/index.php/test/test

Я хочу только тест / тестовую часть.

http://localhost/framework/test/test

Я хочу только тест / тестовую часть.

1 Ответ

6 голосов
/ 27 октября 2011

Вы можете автоматически определить базовый URI и удалить его, оставив вас с тестовой / тестовой частью.

if(!empty($_SERVER['PATH_INFO']))
{
    // Uri info does not contain docroot or index
    $uri = $_SERVER['PATH_INFO'];
}
else
{
    if(!empty($_SERVER['REQUEST_URI']) && !empty($_SERVER['HTTP_HOST']))
    {
       $fullUrl = 'http://'
                  . ((isset($_SERVER['HTTP_HOST'])) ? $_SERVER['HTTP_HOST'] : '')
                  . ((isset($_SERVER['REQUEST_URI'])) ? $_SERVER['REQUEST_URI'] : '');

       $uri = parse_url($fullUrl, PHP_URL_PATH);
    }
    else if(!empty($_SERVER['PHP_SELF']))
    {
       $uri = $_SERVER['PHP_SELF'];
    }
}

$baseUri = substr($_SERVER['SCRIPT_NAME'], 0, strrpos($_SERVER['SCRIPT_NAME'], "/")+1);
$uri = str_replace($baseUri, '', $uri);

Редактировать: Комментарий МАУ выше верен. Я предполагал, что вы уже используете переписывание модов.

...