带有开关盒的URL页面爆炸

时间:2019-01-15 05:37:27

标签: php switch-statement case

脚本工作正常,但是当我尝试访问随机页面时我没有收到任何错误404,

示例:

enter image description here

如果页面不存在以显示诸如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);

2 个答案:

答案 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;
相关问题