如何读取请求URI?

时间:2017-11-01 20:36:17

标签: php .htaccess uri url-routing psr-7

对于我自己的MVC,我需要从全局变量($_GET$_SERVER)中读取请求URI。

首先我想从$_GET数组中读取它。但后来我发现它也包含在$_SERVER数组中。

那么,我想问一下,应该从哪个全局数组读取请求URI?

示例:

URI可以具有以下结构:

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

使用:

  • PsrTest作为控制器名称;
  • testRequest作为操作名称;
  • 123作为控制器操作的参数;
  • var=someval作为一些查询字符串键/值对;

在" .htaccess"中应用RewriteRule,它将被翻译为:

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 个答案:

答案 0 :(得分:0)

但是如果你想使用.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]

这是我写的旧程序的一个小例子。

答案 1 :(得分:0)

正如@teresko建议的那样,.htaccess并非总是存在。然后,在RewriteRule中编写.htaccess s确实没有意义(至少对我来说),它将给定的URI转换为查询字符串参数。这足以:

  • 只需编写一个简单的规则,例如RewriteRule ^ index.php [L];
  • 中的.htaccess
  • 只需解析PHP中的$_SERVER['REQUEST_URI']值,以获取调用控制器操作所需的URI组件并将相应的参数传递给它。

我感谢所有帮助我找到答案的用户。谢谢!