在.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页面。如果有人转到不存在的/members/user1,我需要检查现有用户的数据库,如果不存在,我应该显示 404.php但在这种情况下使用正确的逻辑吗?
附言:如何添加重写/about/以显示同一页面? 当前/about 返回 200,但/about/返回未找到 Apache 页面。
规则
中的第一个更正,使尾部斜杠在两个规则中都是可选的:
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 状态/页面。