Покажу на примере сайта http://www.mobitravel.ru, как можно создать несколько 404 страниц.
Сайт Мобильных путешествий находится на http://www.mobitravel.ru, cайт Avtors.ru находится на http://www.mobitravel.ru/avtor и у каждого из них своя 404 страница, т. е. /404/ и /avtor/404/.
Open Constructor по умолчанию использует страницу /404/ при 404-ой ошибке.
Внутри, Open Constructor разделяет 404 на два вида, и при использовании нескольких 404 страниц, нужно различать эти два вида ошибок:
- страница не найдена, т. е. на сайте нет запрашиваемого файла или запрашиваемая страница не опубликована
- искусственно сгенерированная 404 ошибка, т. е. при помощи $ctx->throw404(). Обычно используется, если запрашиваемый документ не найден или не опубликован.
Они обрабатываются по-разному, в первом случае посылается заголовок HTTP/1.1 404 Not Found и инклудится файл /404/index.php. А во втором случае посылается ответ HTTP/1.1 302 Moved Temporarily на /404/?from=.
И так создаем следующий PHP код:
$subsite = '/avtor/';
$subsite404 = $subsite.'404/';
$href404 = null;if(strpos($_SERVER['REQUEST_URI'], $subsite) === 0) { // превый вид 404
$href404 = $subsite404.'?from='.rawurlencode($_SERVER['REQUEST_URI']);
} elseif(isset($_GET['from']) && strpos($_GET['from'], $subsite) === 0) { // второй вид 404
$href404 = $subsite404.'?from='.rawurlencode($_GET['from']);
}if($href404) {
sendRedirect('http://'.$_SERVER['HTTP_HOST'].$href404);
die();
}
Создаем для этого кода объект «Обратный вызов» и ставим его на страницу /404/ в событие onInitialize

Комментарии