Как прочитать 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]
Это небольшой пример из старой программы, которую я написал.