脚本工作正常,但是当我尝试访问随机页面时我没有收到任何错误404,
示例:
如果页面不存在以显示诸如404错误之类的错误消息,我该怎么办?
# htaccess: #
RewriteEngine On
RewriteBase /bogdan/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
# php splitter: #
$url = isset($_GET['url']) ? $_GET['url'] : 'home';
$url = filter_var(rtrim($url, '/'), FILTER_SANITIZE_URL);
$url = explode('/', $url);
switch ($url[0]) {
case 'home':
$page_name = 'Home';
$page_file = 'pages/1-home.php';
break;
case 'another':
$page_name = 'Another';
$page_file = 'pages/2-another.php';
break;
default:
$page_name = 'Home';
$page_file = 'pages/1-home.php';
break;
}
$page_file = str_replace(["/"], DIRECTORY_SEPARATOR, $page_file);
答案 0 :(得分:0)
更改default:
部分中的代码以返回HTTP 404代码并生成适当的模板。请参阅this question作为参考。
PS。您似乎只检查URL的第一部分,即$_GET[0]
,但看起来好像不处理它的任何后续($_GET[1],...
)部分。通常,我建议您要么在任何带有适当路由包的主流框架上构建应用,要么,如果您不想使用任何全栈PHP框架,则可以通过composer
安装任何路由包。例如。 symfony/routing
答案 1 :(得分:0)
谢谢,解决了。
if (sizeof($url) != 1) {
header('Location: ../404');
}
else {
// nothing
}
default:
$page_name = 'Error';
$page_file = 'pages/errors/404.php';
break;