Разнесите страницу URL с помощью переключателя - PullRequest
0 голосов
/ 15 января 2019

Сценарий работает нормально, но когда я пытаюсь получить доступ к случайной странице, я не получаю никакой ошибки 404,

Пример:

enter image description here

как мне поступить, если страница не существует для отображения сообщения об ошибке, например 404 error?

# 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 голосов
/ 24 января 2019

Спасибо, решено.

if (sizeof($url) != 1) {
    header('Location: ../404');
}
else {
    // nothing
}

default:
    $page_name = 'Error';
    $page_file = 'pages/errors/404.php';
    break;
0 голосов
/ 16 января 2019

Измените код в вашем разделе default:, чтобы получить код HTTP 404 и создать правильный шаблон. См. этот вопрос в качестве ссылки.

PS. Кажется, вы проверяете только первую часть URL, т.е. $_GET[0], но похоже, что вы не обрабатываете любые последующие ($_GET[1],...) его части. В общем, я бы посоветовал вам либо построить ваше приложение на любой основной среде с соответствующим пакетом маршрутизации, либо, если вы не хотите использовать какую-либо полнофункциональную среду PHP, вы можете установить любой пакет маршрутизации через composer. Например. Symfony / маршрутизации

...