Итак, это то, что я должен создать класс диспетчера, который должен отправить http requesd на основе URI запроса, поэтому Im интересовался только частью URI, которая приходит за доменом.
Теперь, когда я работаю на реальном сервере на URI, вот так:
www.domain.com/controller/method/params/
REQUEST_URI вернется:
/controller/method/params/
Но когда я работаю на локальной машине, у меня есть URI, как это:
localhost/project/controller/method/params/
и REQUEST_URI вернется:
/project/controller/method/params/
Итак, есть ли элегантный и опрятный способ сказать php, чтобы получить только те параметры, которые мне нужны от URI? Доцент должен быть $ _SERVER ['REQUEST_URI'], но мне нужна эта строка так же, как на реальном, так и на локальном сервере?
Благодаря!
Диспетчер сравнивает текущий URI запроса с URI, определенным в файле конфигурации. А на живом сервере это соответствует, но на локальной машине есть один сегмент больше, чем на реальном сервере.
Как я могу справиться с этим?
Обычно я настраиваю свой локальный веб-сервер для ответа на «test.mysite.com», а в файле hosts я устанавливаю test.mysite.com на 127.0.0.1, таким образом, я лучше имитирую производственные среды, и я не вынужден использовать подпуты в URL-адресах
Если вы используете веб-сервер apache, вы можете просто настроить N виртуальных хостов.
Вы можете просто удалить путь с самого начала URL-адреса, если он существует.
$path = '/project/'; // for localhost/project/controller/method/params/ //$path = '/'; // for domain.tld/controller/method/params/ $url = getenv('REQUEST_URI'); if(strpos($url, $path) === 0) { $url = str_replace($path, '', $url, 1); } print $url;
Я не тестировал вышеприведенный код, поэтому бродячие «/» могут испортить его. Вы всегда можете обрезать URL с чем-то вроде $url = trim($url, '/')
если это необходимо.
$url = $_SERVER['REMOTE_ADDR'].$_SERVER['REQUEST_URI'];
Это то что ты хочешь?
Я использую встроенную функцию array_shift (), если обнаружен локальный хост .
if ($_SERVER['HTTP_HOST'] == 'localhost') { $array_uri = explode('/', $_SERVER['REQUEST_URI']); array_shift($array_uri); $uri = $array_uri; } else { $uri = explode('/', $_SERVER['REQUEST_URI']); }