对于我自己的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'
感谢您的时间!
答案 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
$_SERVER['REQUEST_URI']
值,以获取调用控制器操作所需的URI组件并将相应的参数传递给它。我感谢所有帮助我找到答案的用户。谢谢!