使用php将URL拆分为页面和文件夹变量?

使用php将URL拆分为页面和文件夹变量?,php,url,variables,split,directory,Php,Url,Variables,Split,Directory,我目前正在使用以下代码从url实现页面、节和类变量 $domain = 'http://' . $_SERVER['HTTP_HOST']; $path = $_SERVER['REQUEST_URI']; $url = $domain . $path; // page + section + class $page = basename($url); $page = $class = str_replace('.php','',$page); $page = str_replace('-',

我目前正在使用以下代码从url实现页面、节和类变量

$domain = 'http://' . $_SERVER['HTTP_HOST'];
$path = $_SERVER['REQUEST_URI'];
$url = $domain . $path;

// page + section + class
$page = basename($url);
$page = $class = str_replace('.php','',$page);
$page = str_replace('-',' ',$page);

if ($path == "/") {
    $section = $class = "home";
} else if (basename(dirname($url),"/") == $_SERVER['HTTP_HOST']) {
    $section = $page;
} else { 
    $section = basename(dirname($url),"/");
    $section = str_replace('-',' ',$section);
    $class =  basename(dirname($url),"/") . " " . $class;
}
例如,如果url是http://www.mydomain.co.uk/about/ 代码将返回以下变量:

$page = "about"
$section = "about"
$class = "about"
为了http://www.mydomain.co.uk/about/general-info/

但当我增加更多的深度,例如http://www.mydomain.co.uk/about/general-info/history/ 要生成代码,请执行以下操作:

$page = "history"
$section = "general info"
$class = "general-info history"
理想情况下,我需要它输出以下内容:

$page = "history"
$section = "about general info"
$class = "about general-info history"
或根据需要将各部分细分为多个部分,例如:

$section1 = "about"
$section2 = "general-info"

希望有人能帮忙。如果有什么不清楚的地方,请询问。

如何使用更通用的拆分

// Url: http://www.mydomain.co.uk/about/general-info/history/
$slices = explode('/', $_SERVER['REQUEST_URI']);
// $slices == ['about', 'general-info', 'history']
然后按照您的意愿进行路由:

$class = implode(' ', $slices);
$section = $slices[1];
// etc.

使用更通用的拆分怎么样

// Url: http://www.mydomain.co.uk/about/general-info/history/
$slices = explode('/', $_SERVER['REQUEST_URI']);
// $slices == ['about', 'general-info', 'history']
然后按照您的意愿进行路由:

$class = implode(' ', $slices);
$section = $slices[1];
// etc.

那么您想要一个URI方案,如下所示

http://<domain>/<section-1>/<section-2>/.../<page>/

那么您想要一个URI方案,如下所示

http://<domain>/<section-1>/<section-2>/.../<page>/

你能告诉我url会达到多少级别吗?就像你在这里提供的,直到第三级。在大多数情况下,只有到第三级。可能会排到第四位,但目前第三位请检查费迪南德的第一个答案。这和我喜欢的是一样的。你能告诉我这个url会达到多少级别吗?就像你在这里提供的,直到第三级。在大多数情况下,只有到第三级。可能会排到第四位,但目前第三位请检查费迪南德的第一个答案。和我喜欢的一样。效果很好,非常感谢。通过在$page和$section上进行测试,我可以灵活地在整个站点中显示、隐藏和选择某些元素。这是一个基于php的网站,使用perch作为cms,因此不控制页面。$class只是在body标记中添加了一个简单的类,以防页面需要稍微不同的样式。要测试我一直使用的页面或部分,请使用以下方法:它可以工作,但这是正确的还是最好的方法?要测试部分,您可能应该跳过内爆部分,将部分列表保留为数组,并使用in_arraygeneral-information,$sections。看:效果很好,非常感谢。通过在$page和$section上进行测试,我可以灵活地在整个站点中显示、隐藏和选择某些元素。这是一个基于php的网站,使用perch作为cms,因此不控制页面。$class只是在body标记中添加了一个简单的类,以防页面需要稍微不同的样式。要测试我一直使用的页面或部分,请使用以下方法:它可以工作,但这是正确的还是最好的方法?要测试部分,您可能应该跳过内爆部分,将部分列表保留为数组,并使用in_arraygeneral-information,$sections。看:在我看来,简单更好。