Показаны сообщения с ярлыком error 404. Показать все сообщения
Показаны сообщения с ярлыком error 404. Показать все сообщения
воскресенье, 19 декабря 2010 г.
4 способа создания страницы 404 (Page not found) в TYPO3
Как я уже писал в одной своей заметке (SEO и общие рекомендации), для сайта очень важно, чтобы при обращении к заведомо несуществующей странице, например http://www.domain.com/bla-bla-bla, сервер не выдавал страницу с кодом: HTTP/1.1 302 Found. Сайт необходимо настраивать так, чтобы при обращении к несуществующей странице веб-сервер возвращал страницу с кодом - Error 404 (Page not found).
В противном случае, некорректная обработка данного запроса может привести к неправильной индексации сайта поисковыми системами, вплоть до полного исключения сайта из индекса поисковой системы.
Как же настроить сайт на TYPO3 надлежащим образом?
Для решения данной задачи у TYPO3 имеется несколько различных способов:
1. Самый простой способ. В конфигурационном файле localconf.php установить параметр:
$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = true;
После этого, реакция системы на URL типа http://www.domain.com/kgfhted будет приводить к появлению страшного и непонятного для пользователя сообщению:

2. Более сложный подход. В конфигурационном файле localconf.php установить 2 параметра:
$TYPO3_CONF_VARS["FE"]["pageNotFound_handling_statheader"] = 'HTTP/1.1 404 Not Found';
$TYPO3_CONF_VARS["FE"]["pageNotFound_handling"] = "http://www.domain.com.ua/error404.html";
Где error404.html это такая же страница сайта, которая была создана с помощью админки Typo3. Например:

Второй параметр можно прописать и так, заменив алиас страницы, на её id:
$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = '/index.php?id=page_id';
Этот подход намного цивильнее, т.к. данная страница уже будет содержать более внятные и полезные комментарии, помогающие пользователю быстрее понять, что произошло и как из данной ситуации можно выйти. Вот, 11 советов о том, какой должна быть данная страница (а это перевод). Как вариант, она может выглядеть вот так:

3. Более продвинутый способ. Страницу 404 можно не создавать в BE, а генерировать с помощью php. Для этого в localconf.php нужно установить следующих 2 параметра:
$TYPO3_CONF_VARS["FE"]["pageNotFound_handling_statheader"] = 'HTTP/1.1 404 Not Found';
$TYPO3_CONF_VARS["FE"]["pageNotFound_handling"] = 'USER_FUNCTION:fileadmin/pageNotFoundHandling.php:user_pageNotFound->pageNotFound';
Как видно из значения 2-го параметра, в директории fileadmin должен находиться файл -
pageNotFoundHandling.php (имя файла может быть произвольным), в нем должен быть определен класс - user_pageNotFound, который имеет метод - pageNotFound.
Примерное содержимое pageNotFoundHandling.php, может быть таковым:
<?php
class user_pageNotFound {
function pageNotFound($param,$ref) {
print "<html>\n<head>\n<title>404 Not found : Sitename</title>\n";
//print '<meta http-equiv="refresh" CONTENT="0;URL=/fileadmin/404-not-found.html">\n';
print "</head>\n<body>\n";
print "Запрашиваемая Вами страница не найдена!";
print "<!--
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
-->";
print "</body>\n</html>\n";
}
}
?>
Т.к. страница 404 должна быть размером более 512 байт, я добавил лишние комментарии - Lorem Ipsum...
4. Опять простой способ. TYPO3 можно настроить так, чтобы при возникновении ошибки 404 на сайте, веб-сервер возвращал пользователю статическую html-страничку. Для этого в localconf.php нужно установить 2 параметра:
$TYPO3_CONF_VARS["FE"]["pageNotFound_handling_statheader"] = 'HTTP/1.1 404 Not Found';
$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = 'READFILE:fileadmin/404.html';
Как видно из примера, в директории fileadmin должен находиться файл 404.html, который и будет видеть пользователь. Напомню еще раз, его размер должен быть более 512 байт!
Обязательно проверьте настройки RealUrl, а то, иногда, можно сломать себе мозг от того, что ничего не работает, хотя все сделано правильно! Обычно, у меня настройки RealUrl находятся в файлах typo3conf/realurl_conf.php или typo3conf/realurlconf.php. Убедитесь что параметр postVarSet_failureMode не имеет значение - redirect_goodUpperDir. Он должен быть пустым, т.е. postVarSet_failureMode=''.
Что же касается многоязычных сайтов, то для того, чтобы страница с 404-ошибкой была на соответствующем языке, необходимо параметр $TYPO3_CONF_VARS['FE']['pageNotFound_handling'] в typo3conf/localconf.php менять примерно следующим образом:
if (substr($_SERVER['REQUEST_URI'], 0, 4) == '/en/' || $_GET['L'] == 1) {
$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = '/en/error404.html';
} elseif (substr($_SERVER['REQUEST_URI'], 0, 4) == '/fr/' || $_GET['L'] == 2) {
$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = '/fr/error404.html';
} else {
$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = '/error404.html';
}
Начиная с 6-й версии TYPO3 конфигурационный файл системы стал называться LocalConfiguration.php, а также претерпел значительные изменения в формате данных. Для того, чтобы сделать страницу 404-й ошибки мультиязычной для данной версии, я использовал следующие настройки:
'FE' => array(
......
'pageNotFound_handling_statheader' => 'HTTP/1.1 404 Not Found',
'pageNotFound_handling' => (substr($_SERVER['REQUEST_URI'], 0, 5) == '/rus/' || $_GET['L'] == 1) ? '/rus/error404/' : '/error404/',
),
Ну вот и всё! Упомяну также, что данную задачу можно решить и настройками Apache. Просто почитайте о параметре ErrorDocument.
В противном случае, некорректная обработка данного запроса может привести к неправильной индексации сайта поисковыми системами, вплоть до полного исключения сайта из индекса поисковой системы.
Как же настроить сайт на TYPO3 надлежащим образом?
Для решения данной задачи у TYPO3 имеется несколько различных способов:
1. Самый простой способ. В конфигурационном файле localconf.php установить параметр:
$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = true;
После этого, реакция системы на URL типа http://www.domain.com/kgfhted будет приводить к появлению страшного и непонятного для пользователя сообщению:

2. Более сложный подход. В конфигурационном файле localconf.php установить 2 параметра:
$TYPO3_CONF_VARS["FE"]["pageNotFound_handling_statheader"] = 'HTTP/1.1 404 Not Found';
$TYPO3_CONF_VARS["FE"]["pageNotFound_handling"] = "http://www.domain.com.ua/error404.html";
Где error404.html это такая же страница сайта, которая была создана с помощью админки Typo3. Например:

Второй параметр можно прописать и так, заменив алиас страницы, на её id:
$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = '/index.php?id=page_id';
Этот подход намного цивильнее, т.к. данная страница уже будет содержать более внятные и полезные комментарии, помогающие пользователю быстрее понять, что произошло и как из данной ситуации можно выйти. Вот, 11 советов о том, какой должна быть данная страница (а это перевод). Как вариант, она может выглядеть вот так:

3. Более продвинутый способ. Страницу 404 можно не создавать в BE, а генерировать с помощью php. Для этого в localconf.php нужно установить следующих 2 параметра:
$TYPO3_CONF_VARS["FE"]["pageNotFound_handling_statheader"] = 'HTTP/1.1 404 Not Found';
$TYPO3_CONF_VARS["FE"]["pageNotFound_handling"] = 'USER_FUNCTION:fileadmin/pageNotFoundHandling.php:user_pageNotFound->pageNotFound';
Как видно из значения 2-го параметра, в директории fileadmin должен находиться файл -
pageNotFoundHandling.php (имя файла может быть произвольным), в нем должен быть определен класс - user_pageNotFound, который имеет метод - pageNotFound.
Примерное содержимое pageNotFoundHandling.php, может быть таковым:
<?php
class user_pageNotFound {
function pageNotFound($param,$ref) {
print "<html>\n<head>\n<title>404 Not found : Sitename</title>\n";
//print '<meta http-equiv="refresh" CONTENT="0;URL=/fileadmin/404-not-found.html">\n';
print "</head>\n<body>\n";
print "Запрашиваемая Вами страница не найдена!";
print "<!--
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
-->";
print "</body>\n</html>\n";
}
}
?>
Т.к. страница 404 должна быть размером более 512 байт, я добавил лишние комментарии - Lorem Ipsum...
4. Опять простой способ. TYPO3 можно настроить так, чтобы при возникновении ошибки 404 на сайте, веб-сервер возвращал пользователю статическую html-страничку. Для этого в localconf.php нужно установить 2 параметра:
$TYPO3_CONF_VARS["FE"]["pageNotFound_handling_statheader"] = 'HTTP/1.1 404 Not Found';
$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = 'READFILE:fileadmin/404.html';
Как видно из примера, в директории fileadmin должен находиться файл 404.html, который и будет видеть пользователь. Напомню еще раз, его размер должен быть более 512 байт!
Обязательно проверьте настройки RealUrl, а то, иногда, можно сломать себе мозг от того, что ничего не работает, хотя все сделано правильно! Обычно, у меня настройки RealUrl находятся в файлах typo3conf/realurl_conf.php или typo3conf/realurlconf.php. Убедитесь что параметр postVarSet_failureMode не имеет значение - redirect_goodUpperDir. Он должен быть пустым, т.е. postVarSet_failureMode=''.
Что же касается многоязычных сайтов, то для того, чтобы страница с 404-ошибкой была на соответствующем языке, необходимо параметр $TYPO3_CONF_VARS['FE']['pageNotFound_handling'] в typo3conf/localconf.php менять примерно следующим образом:
if (substr($_SERVER['REQUEST_URI'], 0, 4) == '/en/' || $_GET['L'] == 1) {
$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = '/en/error404.html';
} elseif (substr($_SERVER['REQUEST_URI'], 0, 4) == '/fr/' || $_GET['L'] == 2) {
$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = '/fr/error404.html';
} else {
$TYPO3_CONF_VARS['FE']['pageNotFound_handling'] = '/error404.html';
}
Начиная с 6-й версии TYPO3 конфигурационный файл системы стал называться LocalConfiguration.php, а также претерпел значительные изменения в формате данных. Для того, чтобы сделать страницу 404-й ошибки мультиязычной для данной версии, я использовал следующие настройки:
'FE' => array(
......
'pageNotFound_handling_statheader' => 'HTTP/1.1 404 Not Found',
'pageNotFound_handling' => (substr($_SERVER['REQUEST_URI'], 0, 5) == '/rus/' || $_GET['L'] == 1) ? '/rus/error404/' : '/error404/',
),
Ну вот и всё! Упомяну также, что данную задачу можно решить и настройками Apache. Просто почитайте о параметре ErrorDocument.
Подписаться на:
Сообщения (Atom)
О себе
- Вадим Гиркало
- Фрилансер, веб-разработчик сайтов на базе бесплатной, мощнейшей и очень гибкой CMS системы - TYPO3.
Мой сайт
Позвонить мне в Skype
TOP - 3
-
Как я уже писал в одной своей заметке ( SEO и общие рекомендации ), для сайта очень важно, чтобы при обращении к заведомо несуществующей ст...
-
Дорабатывая очередной свой сайт столкнулся с такой проблемкой. В шапке сайта есть две флэш вставки - банер, который вставлен через конструкц...
-
Несмотря на то, что материала по данной тематике вроде бы и достаточно, но весь он носит кусочно-латочно-разрозненный характер, что мешает б...