Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过url重写访问$\u GET[]数组_Php_Url - Fatal编程技术网

Php 通过url重写访问$\u GET[]数组

Php 通过url重写访问$\u GET[]数组,php,url,Php,Url,我正在为一家美发沙龙建立一个网站。我得到了所有需要的时间,所以我开始构建我的MVC框架,只是为了更好地理解MVC。MVC的核心是url重写 RewriteRule ^(.*)/?$ index.php?url=$1 [L] 这将导致 www.example.com/register $_GET['url'] = 'register' 我决定使用页面发布/重定向/获取模式。所以当我重定向时,url应该是这样的 www.example.com/register/John/Doe/mail ww

我正在为一家美发沙龙建立一个网站。我得到了所有需要的时间,所以我开始构建我的MVC框架,只是为了更好地理解MVC。MVC的核心是url重写

RewriteRule ^(.*)/?$ index.php?url=$1 [L]
这将导致

www.example.com/register
$_GET['url'] = 'register'
我决定使用页面发布/重定向/获取模式。所以当我重定向时,url应该是这样的

www.example.com/register/John/Doe/mail
www.example.com/register/?name=John&lastName=Doe&mail=johdoe@gmail.com
或者类似的东西。该值完全位于$\u GET['url']变量中。有没有办法让url看起来像这样

www.example.com/register/John/Doe/mail
www.example.com/register/?name=John&lastName=Doe&mail=johdoe@gmail.com
使用$\u GET['name']、$\u GET['lastName']等可以访问哪一个

我知道$\u SERVER['REQUEST\u uri']变量中有一个完整的uri,但我想知道有没有更干净的方法来获取值?

我会在
$\u SERVER['REQUEST\u uri']
上运行
explode()
,它将为您提供一个枚举元素数组(如
数组('register','John Doe','mail);
)。使用数组中的第一个元素将代码映射到寄存器函数,然后您可以接受数字索引元素,或者编写一些通用映射代码来映射它

写一些普通的东西,比如:

function mapper($params, $mapping)
{
  $result = array();
  foreach($mapping as $key => $value)
  {
    $result[$value] = $params[$key];
  }
}

mapper($explodeData, array('function', 'fname', 'lname', 'request');

然后,随着代码库的扩展,您可以处理不同函数的通用映射。

您需要自己进行解析。我强烈建议您改用
$\u SERVER['QUERY\u STRING']
,这样您也可以省略
url=
部分


或者,您可以设置更多的重写规则,但这也有其缺点,比如不动态生成这些规则就无法进行动态处理(这对于非Apache的Web服务器来说也是不可能的,比如nginx)

QUERY\u STRING
是这里要使用的服务器变量,因为它已经去掉了
index.php
部分,但是我制作了一个使用会话(post/redirect/session)的前一个类系统,所以我试图制作与这组类一起使用的代码。基本上,我现在精神状态不好。我想是的,但不得不问。非常感谢。