使用url重写访问$ _GET []数组

时间:2013-11-30 17:04:50

标签: php url

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

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

这会导致这个......

www.example.com/register
$_GET['url'] = 'register'

我决定将页面发布/重定向/获取模式。因此,当我重定向时,网址应该是这样的......

www.example.com/register/John/Doe/mail

或类似的东西。该值完全在$ _GET ['url']变量中。有没有办法让网址看起来像这样......

www.example.com/register/?name=John&lastName=Doe&mail=johdoe@gmail.com

可以使用$ _GET ['name'],$ _GET ['lastName']等进行访问...?

我知道$ _SERVER ['REQUEST_URI']变量中有一个完整的uri,但我想知道是否有更清晰的方法来获取值?

2 个答案:

答案 0 :(得分:2)

我会在explode()上运行$_SERVER['REQUEST_URI'],它会为您提供一个枚举的元素数组(如array('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');

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

答案 1 :(得分:2)

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

或者您可以设置更多的重写规则,但这有其缺点,例如没有动态处理而不动态生成这些规则(除了Apache之外的Web服务器也是不可能的,如nginx)