php include - 替代更好的url

时间:2014-03-31 20:38:51

标签: php url

我想构建一个具有不同视图的网站,但是一个稳定的页眉和页脚 - 到目前为止没问题。但我不喜欢我用php GET方法获得的那种网址。 我的网站目前的工作方式是这样的(工作正常):

$_page = $_GET['p'];
if ($_page == "city-sitemap"){ include "views/city-sitemap-view.php"; }

if ($_page == "place"){ include "views/place-view.php"; }


else { include "views/index-view.php";}

这不是一个非常甜蜜的解决方案,但我现在不认识另一个。我尝试使用mvc框架但是失败了。所以每次我添加一个我使用的链接,例如这个“index.php?p = place” - 不是很好。 观点的包含也不是很聪明?有没有更好的办法? 我想使用像rewriteEngine这样的东西,新的url就像一个文件夹。 你能帮我找到更好的解决方案吗? 非常感谢

3 个答案:

答案 0 :(得分:2)

页面包括

对于页面包含,您可以使用简单数组将页面动态分配到特定名称。如此:

$pages = array('city-sitemap'=>'views/city-sitemap-view.php',
    'place'=>'views/place-view.php',
)

if(array_key_exists($_GET['p'], $pages){
    include $pages[$_GET['p']];
}else{
    include 'views/error.php';
}

此数组应添加到常规配置文件中。使用此配置,如果要显示city-sitemap-view.php视图,则必须编写此URL:http://www.domain.com/index.php?p=city-sitemap

网址重写

可以使用.htaccess文件重写URL。以下是您可以在.htaccess文件中编写的代码示例。

RewriteEngine On
RewriteRule ^(.*)$ index.php?p=$1 [L,QSA]

一个看起来像这样的网址:

  

http://www.domain.com/index.php?p=city-sitemap

将转换为这个:

  

http://www.domain.com/city-sitemap

答案 1 :(得分:0)

你应该研究一下叫front controller的东西。你自己可以写一个非常简单的。它与URL rewriting一起使用。例如,如果您的网址如下所示:     /mypage.html

url rewriter会将请求重新路由到index.php。

然后,

Index.php将查看URL并执行以下操作:

1)将页面分成字符串,忽略.html扩展

 preg_match("\/(.*?)\.html", $_REQUEST['URI'], $matches);
 $pageClass = $matches[1];
 //$pageClass = "mypage"

2)寻找并加载名为" Mypage.php"

的类
 $controller = new $pageClass();

3)在页面类上调用run方法,并将所有请求参数传递给它

 $request = new Request($_REQUEST);
 $controller->run($request);

然后,您可以在控制器类中执行特定于页面的所有页面特定内容。

在整个过程中的每个简单步骤中,您会发现您想要做更多的事情,如身份验证,过滤,跟踪等。您将最终开发出一个特定于您需求的前端控制器,以及一个基本的Controller类,它可以完成所有控制器共有的标准内容。

答案 2 :(得分:0)

根据我的评论,我真的认为你应该考虑我链接的框架,(这是非常合乎逻辑的)或任何其他微框架,但如果你真的希望自己这样做,那么你可以像这样处理你的包括: / p>

<?php  //index.php
$requested_page=isset($_GET['p'])?$_GET['p']:'home';

//maybe have this included from pages.php for organization
$pages=array(
    'home'=>'home_content.php',
    'about'=>'about_content.php',
    'contact'=>'contact_content.php'
);

include "views/header.php";
if(array_key_exists($requested_page, $pages)){
    include "views/".$pages[$requested_page];
}else{
    header('HTTP/1.0 404 Not Found');
    include "views/error404.php";
}
include "views/footer.php";

这可以使您的网页保持在一个阵列中,并防止任意包含漏洞。

对于更好的网址,请参阅其他用户.htaccess重写规则