Redirect 404, если обработка через index.php

lospirata
На сайте с 24.12.2010
Offline
103
2220

День добрый.

В htaccess внесено следующее:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

ErrorDocument 404 /404.php

Соответственно, если страница не найдена, запрос отправляется в index.php, где происходит последующая обработка. ErrorDocument 404 в этом случае не работает.

В index.php происходит проверка по слэшу, потом открывает нужный файл:

<?php
$uri = preg_replace('/(^\/)|(\?.*?$)/', '', $_SERVER['REQUEST_URI']);
$uri = preg_replace('/\.[^s]\w+$/', '', $uri);

if (!stristr($uri, '/')) {
if (!trim($uri) || $uri == 'index') $_GET['id'] = 1;
else {
$alias = $uri;
}
$table = 'pages';
include 'pages.php';
}

else {
if (preg_match('/-(\d+)$/', $uri, $matches)) {
$_GET['id'] = $matches[1];
}
else {
$alias = preg_replace('/.*\/([^\/]+)$/', '$1', $uri);
}
$table = 'doors';
include 'doors.php';
}
?>

При наборе несуществующей страницы, например, "site.ru/dgdfgsf", срабатывает первое условие, при вводе "site.ru/fghfgh/fdgdfg" второе условие.

Как сделать 404 редирект?

Спасибо.

It Can't Rain All the Time Блог вебмастера (https://lospirata.ru/)
F
На сайте с 17.05.2009
Offline
28
#1

Просто покажите ваш 404 из index скрипта (когда логика скрипта указывает, что странички нет)

Выдайте что-то вроде

header("HTTP/1.0 404 Not Found");
, а дальше ваше 404 сообщение.
IL
На сайте с 20.04.2007
Offline
435
#2
404 редирект

Откуда термин?

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
lospirata
На сайте с 24.12.2010
Offline
103
#3
ivan-lev:
Откуда термин?

Редирект - автоматическое перенаправление пользователей. Не так важно, какой термин использовал, главное, что вы меня поняли )

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий