如何读取请求URI?

How to read the request URI?

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

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

那么请问,请求URI应该从哪个全局数组中读取?


例子:

URI 可以具有以下结构:

http://local.mvc/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'

感谢您的宝贵时间!

但如果您想使用 .htaccess,这是一个开始。

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

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

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

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

这是我编写的旧程序中的一个小示例。

正如@teresko 所建议的,.htaccess 并不总是可行的。那么在 .htaccess 中编写 RewriteRules 确实没有意义(至少对我而言),它将给定的 URI 转换为查询字符串参数。足以:

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

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