0

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

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

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


一个例子:

URI 可以具有以下结构:

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

和:

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

通过RewriteRule在“.htaccess”中应用a,它将被翻译为:

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'

感谢您的时间!

4

2 回答 2

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]

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

于 2017-11-02T11:21:03.007 回答
0

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

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

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

于 2017-11-02T13:06:54.003 回答