这是一种基于URL包含页面的糟糕方式吗?(使用mod_rewrite
到index.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));
查看这里的实时交互示例。
注意,虽然对于通配符匹配来说,这是最好的方法,但效率要低得多。
(对于大多数页面来说,这种低效率是可以忍受的。)