0

首先,我查看了 mod_rewrite - 如何重定向错误输入的“漂亮”url,但是 OP 希望他的错误输入的 URL 重定向到正确的,我只是想让我的错误 404。

快速提问。我正在寻找一种解决方案来改进我拥有的一些 mod re_write 代码。

目前,如果有人在我的网站上输入一个产品页面的 URL,即“/products/[category]/[product-name]”,.htaccess 文件具有以下代码

RewriteRule ^products\/([^/]+)\/([^/]+)$        ?page=product&product=$2 [L]

这完全符合预期,但是如果有人仅输入错误的 [产品名称],模板页面仍会使用 URL 中的产品名称作为变量加载,并且不会出现 404 错误。

我处理所有错误页面,如下所示:

#ErrorDocument 404          /index.php?page=error404

希望有人可以阐明如何调整以前的重写规则,以便页面不存在即如果我们有一个名为kettle的产品并且有人在URL末尾键入ketle,它将是404而不是仍然加载模板页面用ketle作为GET var。

提前致谢。

4

2 回答 2

2

我假设您的index.php脚本处理“页面”和“产品”参数。它将是唯一知道“产品”参数是否实际指向有效产品名称的人。如果没有,则需要使用header函数生成404,然后显示page=error404.

htaccess 文件和 mod_rewrite 不会知道页面名称是正确还是输入错误,只有执行查找的脚本会知道。

于 2013-04-05T17:49:15.260 回答
1

您甚至可以将 PHP 脚本写入动态页面的<head>元素中,以这种格式为例:

$con = mysqli_connect("$hostname", "$username", "$password", "$database");

if (mysqli_connect_errno()) {
    echo mysqli_connect_error();
}

$result = mysqli_query($con, "SELECT content FROM pages WHERE id = $value LIMIT 1");

if (0 = mysqli_fetch_array($result)) {
    echo '<meta http-equiv="location" content="URL=http://www.yourdomain.com/index.php?page=error404">';
}

注意:仔细检查上面的代码是否正确,因为它只是一个示例,并没有很好地检查语法以及是否使用mysqli_fetch_array()计算SQL 查询的$result上的行数。

于 2013-04-05T19:20:36.170 回答