首先,我查看了mod_rewrite - how to redirect a mistyped 'pretty' url然而OP希望他的错误输入的网址重定向到正确的,我只是想让我的错误404。
快速提问。我正在寻找一个解决方案来改进我的一些mod re_write代码。
目前,如果有人要在我的网站上输入一个产品页面的网址I.e. “/ products / [category] / [product-name]”.htaccess文件具有以下代码
RewriteRule ^products\/([^/]+)\/([^/]+)$ ?page=product&product=$2 [L]
哪种方式与预期完全一致,但如果有人输错了[product-name],模板页面仍会使用URL中的产品名称作为变量加载而不会出现404错误。
我处理所有错误页面:
#ErrorDocument 404 /index.php?page=error404
希望有人能够阐明如何调整以前的重写规则以便不存在的页面。如果我们有一个名为kettle的产品,并且有人在URL的末尾键入了ketle,那么它将是404而不是仍然使用ketle加载模板页面作为GET var。
提前致谢。
答案 0 :(得分:2)
我假设你是index.php
脚本处理“页面”和“产品”参数。这将是唯一一个知道“产品”参数是否实际指向有效产品名称的人。如果没有,那么您需要使用header函数生成404,然后显示page=error404
的内容。
htaccess文件和mod_rewrite不会知道页面名称是否正确或是否输入错误,只有查找的脚本才会知道。
答案 1 :(得分: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()用于计算行( s)在SQL查询的 $ result 上。