Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  

Recommended Posts

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

@siv1987, 403 работает нормально, но я так понял, что с 404 лучше не заморачиваться?

Share this post


Link to post
Share on other sites

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

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

  • Upvote 1

Share this post


Link to post
Share on other sites

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

В .htaccess добавил:

 

ErrorDocument 403 /403.html

 

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

 

 

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

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

 

 

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

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

Share this post


Link to post
Share on other sites

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

 

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

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

  • Upvote 1

Share this post


Link to post
Share on other sites

В .htaccess добавил:

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

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

 

GET /user/907-helga/
403 Forbidden

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

 

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

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

 

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

Да.

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

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

 

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Не подскажите, что там нужно поправить?

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

Если включен ЧПУ

А если ЧПУ не включён?

Share this post


Link to post
Share on other sites

А если не включен то править ничего не нужно (см #6, но в данном случае не имеет смысла).

Share this post


Link to post
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
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...