在PHP中包含基于URL的页面

时间:2011-11-11 06:39:00

标签: php .htaccess mod-rewrite

这是一种基于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的这些第二/第三等论点?

这完全是SEO与上述例子不兼容吗?

1 个答案:

答案 0 :(得分:0)

我本身并不完全理解你的问题 你是什​​么意思“这些第二/第三等争论”?

您可以采用更易读/可维护的方式执行相同的步骤,如下所示:

$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));

有关实时互动示例,请参阅Here

请注意,效率低得多,但对于通配符匹配,这是最好的方法 (对于大多数页面来说,效率低下是宜居的。)