Контактная информация            Баг трекер            Предложение хостинг-провайдерам

Несколько страниц 404

Санжар Ахмедов Автор: Санжар Ахмедов
Дата: 2 июля 2007
Рубрика: How-to

Покажу на примере сайта 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 страниц, нужно различать эти два вида ошибок:

  1.  страница не найдена, т. е. на сайте нет запрашиваемого файла или запрашиваемая страница не опубликована
  2.  искусственно сгенерированная 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

Комментарии

RSS RSS

Добавить комментарий

Имя:     Email:
Комментарий:
Введите символы, которые видите на картинке.
Если символы неразборчивы, кликните по картинке несколько раз.