我有一个使用此风格的网站:/index.php?page=45&info=whatever&anotherparam=2
我计划将上一个网址转换为:/profile/whatever/2
我知道我必须使用.htAccess并将所有内容重定向到index.php。没关系。
我的问题更多在index.php(Front Controller)中。如何构建$_GET["info"]
和$_GET["anotherparam"]
以便能够继续使用在其页面中使用$_GET[...]
的所有现有代码?
我是否必须使用某些代码在标头中构建GET,或者我必须通过创建我自己的数组来清除每个页面上的所有$_GET[...]
,并将/
解析为分配如下内容:$myParam["info"] = "whatever"
,而不是使用$myParam[]
代替$_GET[]
?
我不想修改所有使用$_GET[]
我的.htAccess看起来像:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ index.php [NC,L]
不存在的一切都转到index.php。因为我已经使用了这个结构:/index.php?page=45&info=whatever&anotherparam=2
没有任何东西被打破。但现在我将使用/profile/whatever/2
,在切换情况下,我可以确定include(..)
的页面,但问题在于所有GET参数。如何构建它们以使用$ _GET []?
答案 0 :(得分:3)
$path = ... // wherever you get the path $_SERVER[...], etc.
// eg: /profile/wathever
$segments = split ($path);
$segments_name = Array ('page', 'info', 'anotherparam');
for($i=0;$i < count ($segments); $i++) {
$_GET[$segments_name[$i]] = $segments[$i];
}
使用此解决方案,您必须始终在相同位置使用相同的参数
如果您不希望有两个解决方案: - 使用/ page / profile / info / wathever之类的路径 - 使用路由器系统(为此我建议您使用框架而不是手动完成)
编辑:第二个解决方案
$path = ... // wherever you get the path $_SERVER[...], etc.
// eg: /page/profile/info/wathever
$segments = split ($path);
for($i=0;$i < count ($segments); $i+=2) {
$_GET[$segments[$i]] = $segments[$i+1];
}
答案 1 :(得分:0)
请改用switch语句。还记得修改.htaccess
<?php
switch ($_GET) {
case "home":
header('Location: /home/');
break;
case "customer":
header('Location: /customer/');
break;
case "profile":
header('Location: /profile/');
break;
}
?>