在PHP中包含基于URL的页面


Including pages based on URL in PHP

这是一种基于URL包含页面的糟糕方式吗?(使用mod_rewriteindex.php)

if($url === '/index.php/'.$user['username']) {
    include('app/user/page.inc.php');
}
// Upload *
else if($url === '/index.php/'.$user['username'].'/Upload') {
    include('app/user/upload.inc.php');
}
// Another page *
else if($url === '/index.php/AnotherPage') {
    include('page/another_page.inc.php');
}

我使用$_GET['variables']mod_rewrite

^(.+)$ index.php?user=$1 [NC]

和其他几个基页。但是,这些只是基本文件的第一个参数。上面的if/else示例也是区分大小写的,这真的不太好。

你对此有何看法?

我如何mod_rewrite这些第二/第三等参数的index.php ?

这与前面提到的例子完全不兼容吗?

我不太明白你的问题。
你所说的"第二/第三等论点"是什么意思?

你可以用一种更易读/可维护的方式做同样的步骤,如下所示:

$urls = array(
 '/index.php/'.$user['username']           => 'app/user/page.inc.php',
 '/index.php/'.$user['username'].'/Upload' => 'app/user/upload.inc.php',
 '/index.php/AnotherPage'                  => 'page/another_page.inc.php'
);
$url = $urls[$url];

如果'.inc.php'是一致的,您可以从数组的每一项中删除它,并在末尾添加它:
$url = $urls[$url].'inc.php'

同样,您可以反向编写数组(切换上述数组中的键和值)并使用preg_grep搜索它。这将允许您搜索url而不区分大小写,以及允许通配符。

$url = key( preg_grep("/$url/i", $urls));

查看这里的实时交互示例。

注意,虽然对于通配符匹配来说,这是最好的方法,但效率要低得多。
(对于大多数页面来说,这种低效率是可以忍受的。)