Jump to content

Своя ошибка 404


Recommended Posts

На форуме, в случае некорректно набранного адреса, выдается стандартная ошибка 404 (скрин ниже), а хотелось бы свою. Создал 404.html, в .htaccess указал путь к файлу, но на форуме все-равно выдается дефолтная страница.

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

 

post-54136-0-10737600-1410006088_thumb.jpg

Link to comment
Share on other sites

Своя страница об ошибке

Без костылей это не сделать. Апач, насколько я знаю, не перехватывает ошибки отправленные из скриптов, поэтому переопределить их через ErrorDocument не получится. И 404 заголовок отправляется не только к некорректно набранному адресу, а еще к куча других ошибок, перегрузить все 404 ошибки одной страницы будет не правильно, а то может выйти что-то подобное.

Link to comment
Share on other sites

403 работает нормально

При каких обстоятельствах он работает? При листинге категории, или при выводе какой нибудь ошибки форума с кодом 403? Если при листинге категорий то естественно будет работать, эта системная ошибка сервера и ее можно перехватить через htaccess. Таким же образом можете отключить реврайт ссылок (мод_реврайт перехватывает все запросы) и запросить несуществующий адрес, тогда 404 ошибка тоже "сработает". Но в данном случае мод_реврайт перехватывает все несуществующие запросы и отправляет на index.php.

  • Upvote 1
Link to comment
Share on other sites

При каких обстоятельствах он работает?

В .htaccess добавил:

 

ErrorDocument 403 /403.html

 

(403.html заблаговременно был создан в корне форума).

 

 

При листинге категории, или при выводе какой нибудь ошибки форума с кодом 403?

Запрет листинга никак не повлиял на вывод ошибки 403.

 

 

Таким же образом можете отключить реврайт ссылок (мод_реврайт перехватывает все запросы) и запросить несуществующий адрес, тогда 404 ошибка тоже "сработает". Но в данном случае мод_реврайт перехватывает все несуществующие запросы и отправляет на index.php.

Вы имеете ввиду RewriteEngine off?
Link to comment
Share on other sites

Кстати, если нужна имена 404 ошибка при запросе несуществующего адреса, то вызов ее находится в контроллере /admin/sources/base/ipsController.php

 

$this->registry->getClass('output')->showError( 'incorrect_furl', 404, null, null, 404 );

Можете сверстать свой шаблон с ошибкой в врапере форума. Можно вместо нее подключить сторонний файл.

  • Upvote 1
Link to comment
Share on other sites

В .htaccess добавил:

При каких обстоятельствах (случаях) срабатывает?

Я вот зашел у вас в профиль пользователя. Доступ запрещен, а в заголовке ответа от сервера 403 ошибка, но у меня выводится стандартная ошибка форума.

 

GET /user/907-helga/
403 Forbidden

Разницу видите? Если ошибка обрабатывается сервером (запрос каталога без индексного файла, блокировка ип через htaccess и другие действия которые вызывают 403 код) то ее можно перехватить через htaccess. В случае запросом несуществующих УРЛ, то мод реврайт захватывает их и отправляет форуму. И уже все ответы отправленные из форума не являются ошибкой сервера.

 

Запрет листинга никак не повлиял на вывод ошибки 403.

Что в вашем понимании значит "вывод ошибки 403"?

 

Вы имеете ввиду RewriteEngine off?

Да.

Link to comment
Share on other sites

@siv1987, я думаю, такие ошибки, как "запрет гостю к просмотру профиля пользователя" можно оставить на уровне форума. А ошибки, выдаваемые при попытке доступа к запрещенным от просмотра файлам (или директориям), можно осуществлять через ошибку, посредством сервера (403).

 

И вообще, изначально, мне был интересен немного иной вопрос - чтобы при любых ошибках не выводились сигнатуры сервера в этих ошибках, ибо чревато. Посему, я озаботился вопросом создания своих страниц ошибок.

Link to comment
Share on other sites

я думаю, такие ошибки, как "запрет гостю к просмотру профиля пользователя" можно оставить на уровне форума. А ошибки, выдаваемые при попытке доступа к запрещенным от просмотра файлам (или директориям), можно осуществлять через ошибку, посредством сервера (403).

Эти ошибки обрабатываются на разных уровнях, поэтому и результаты разные. Хотя и то, и то имеет код 403 Forbidden.

 

И вообще, изначально, мне был интересен немного иной вопрос

Ну изначально вопрос сабжа был про то, как создать свою страницу с ошибками в случае некорректно набранного адреса без дефолтной страницы форума. Я вам объяснил почему появляется ошибка форума при запросе таких адресов, и почему без костылей в данном случае это сделать нельзя. Потом вы сказали что "403 работает нормально". Я вам объяснил почему 403 работает "нормально", и почему 404 работает "не нормально".

Link to comment
Share on other sites

@siv1987, спасибо большое. Я вас прекрасно понял. И ведь действительно, при отключении RewriteEngine (в положение Off), ошибка 404 работает везде (даже при обращении гостем к профилю зарегистрированного пользователя). Но ведь отключение RewriteEngine повлияет на другие функции .htaccess в mod_rewrite.c, коими учитывается именно рабочее положение RewriteEngine (On).

Link to comment
Share on other sites

Кстати, если нужна имена 404 ошибка при запросе несуществующего адреса, то вызов ее находится в контроллере /admin/sources/base/ipsController.php

Не подскажите, что там нужно поправить?
Link to comment
Share on other sites

require DOC_IPS_ROOT_PATH.'404.php';

Если включен ЧПУ, то править нужно в /admin/sources/base/ipsRegistry.php

 

		if ( ipsRegistry::$settings['use_friendly_urls'] AND self::$_noFurlMatch === true )
		{
			self::getClass('output')->showError( 'incorrect_furl', 404, null, null, 404 );
		}

Заменив на

 

		if ( ipsRegistry::$settings['use_friendly_urls'] AND self::$_noFurlMatch === true )
		{
			require DOC_IPS_ROOT_PATH.'404.php';
			exit;
		}

  • Upvote 3
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...