Как прочитать URI запроса?

Для моего собственного MVC мне нужно прочитать URI запроса из глобальных переменных ($_GET или же $_SERVER).

Сначала я подумал прочитать $_GET массив. Но потом я обнаружил, что он содержится в $_SERVER массив также.

Итак, я хотел бы спросить, из какого глобального массива должен быть прочитан URI запроса?


Пример:

URI может иметь следующую структуру:

http://local.mvc/PsrTest/testRequest/123?var=someval

с:

  • PsrTest как имя контроллера;
  • testRequest как название действия;
  • 123 в качестве аргумента для действия контроллера;
  • var=someval в качестве некоторой пары ключ / значение строки запроса;

Применяя RewriteRule в ".htaccess" он будет переведен на:

http://local.mvc/index.php?url=PsrTest/testRequest/123&var=someval

и он будет сохранен в следующих пунктах $_GET а также $_SERVER массивы:

------------
$_GET array:
------------

'url' => 'PsrTest/testRequest/123'
'var' => 'someval'

---------------
$_SERVER array:
---------------

'HTTP_REFERER' => 'http://local.mvc/PsrTest/testRequest/123?var=someval'
'REDIRECT_QUERY_STRING' => 'url=PsrTest%2ftestRequest%2f123&var=someval'
'REDIRECT_URL' => '/PsrTest/testRequest/123'
'QUERY_STRING' => 'url=PsrTest%2ftestRequest%2f123&var=someval'
'REQUEST_URI' => '/PsrTest/testRequest/123?var=someval'

Спасибо за ваше время!

2 ответа

Решение

Как подсказал @teresko, .htaccess не всегда возможность. Тогда нет смысла (по крайней мере, для меня) писать RewriteRuleв .htaccess, которые переводят данный URI в параметры строки запроса. Достаточно будет:

  • Просто напишите простое правило, как RewriteRule ^ index.php [L] в .htaccess;
  • Просто разбери $_SERVER['REQUEST_URI'] значение в PHP, чтобы получить компоненты URI, необходимые для вызова действия контроллера и передачи ему соответствующих параметров.

Я благодарен всем пользователям, которые помогли мне найти мой ответ. Спасибо!

Но если вы хотите использовать.htaccess, это начало.

RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f

# One param
RewriteRule ^/?([^/]*)$ index.php?section=$1 [NC,L]

# Two params
# IE: search/12345
RewriteRule ^edituser/([a-zA-Z0-9]+)/?$ index.php?section=edituser&id=$1 [NC,L]

# Three params
# IE: search/12345/676767
RewriteRule ^editcontact/([a-zA-Z0-9]+)/([a-zA-Z0-9]+)/?$ index.php?section=editcontact&contactID=$1&reservationID=$2 [NC,L]

Это небольшой пример из старой программы, которую я написал.

Другие вопросы по тегам