使用php和htaccess重写相当的URL,为子页面映射404

时间:2013-10-15 18:40:44

标签: php apache .htaccess mod-rewrite url-rewriting

在.htaccess中,我有以下规则来重写页面/子页面。

#Permalinks
RewriteEngine on
<IfModule mod_rewrite.c>
RewriteEngine On
#catch potential subpages first
RewriteRule ^([a-z\-]+)/([a-z\-]+)/?$ index.php?page=$1&subpage=$2 [L]
#
RewriteRule ^([a-z\-]+)$ index.php?page=$1 [L]
</IfModule>

在php中我这样做:

if (!$_GET) {
    //
    $page = "home";
    $page_title = "General Site Title";
    include ("template/index.php");
    //
} else if ($_GET['page'] == "words") {
    //
    $page = "words";
    $page_title = "Words Page";
    include ("template/words.php");
    //
} else if ($_GET['page'] == "about") {
    //
    $page = "about";
    $page_title = "About Page";
    include ("template/about.php");
    //
} else {
    //
    header("HTTP/1.0 404 Not Found");
    //
        include ("template/404.php");
    //
    exit();
    //
}

这非常有用,可以在页面不存在时显示404.php。

但是如果我还想在页面/子页面不存在的情况下拥有404.php怎么办?

例如我打算有/成员页面。如果有人去了非现有/ members / user1,我需要检查现有用户的数据库,如果不存在,我应该显示404.php,但这是在这种情况下使用的正确逻辑吗?

P.S。如何添加重写/关于/显示相同的页面?当前/约返回200,但/ about /返回找不到apache页面。

1 个答案:

答案 0 :(得分:1)

规则中的第一个更正是使两个规则中的尾随斜杠可选:

RewriteEngine On

RewriteRule ^([a-z-]+)/([a-z-]+)/?$ index.php?page=$1&subpage=$2 [L,NC,QSA]
RewriteRule ^([a-z-]+)/?$ index.php?page=$1 [L,NC,QSA]

现在关于检查/members/user1是的,您可以检查数据库是否存在成员记录,如果没有找到,您可以返回404状态/页面。