Как получить тот же самый $ _SERVER как на локальном, так и на живом сервере

Итак, это то, что я должен создать класс диспетчера, который должен отправить 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']); }