Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Своя ошибка 404

Опубликовано:

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

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

 

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

Рекомендованные сообщения

Опубликовано:

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

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

Опубликовано:
  • Автор

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

Опубликовано:

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

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

Опубликовано:
  • Автор

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

В .htaccess добавил:

 

ErrorDocument 403 /403.html

 

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

 

 

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

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

 

 

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

Вы имеете ввиду RewriteEngine off?
Опубликовано:

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

 

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

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

Опубликовано:

В .htaccess добавил:

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

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

 

GET /user/907-helga/
403 Forbidden

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

 

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

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

 

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

Да.

Опубликовано:
  • Автор

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

 

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

Опубликовано:

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

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

 

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

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

Опубликовано:
  • Автор

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

Опубликовано:
  • Автор

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

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

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;
		}

Опубликовано:
  • Автор

@siv1987, большое спасибо :)

Опубликовано:
  • Автор

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

А если ЧПУ не включён?
Опубликовано:

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

Опубликовано:
  • Автор

Сделал всё, как вы написали в сообщении #12, но у меня выдало ошибку:

 

Parse error: syntax error, unexpected ',' in /home/s/salekh/salekhardnews.ru/public_html/admin/sources/base/ipsRegistry.php on line 795

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.