我正在建一个发廊的网站。我得到了所有我需要的时间所以我开始构建我的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,但我想知道是否有更清晰的方法来获取值?
答案 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)