Одмин Posted September 6, 2014 Share Posted September 6, 2014 На форуме, в случае некорректно набранного адреса, выдается стандартная ошибка 404 (скрин ниже), а хотелось бы свою. Создал 404.html, в .htaccess указал путь к файлу, но на форуме все-равно выдается дефолтная страница.Подскажите, где поправить, чтобы перенаправляло на мою страницу ошибки 404! Link to comment Share on other sites More sharing options...
siv1987 Posted September 6, 2014 Share Posted September 6, 2014 Своя страница об ошибкеБез костылей это не сделать. Апач, насколько я знаю, не перехватывает ошибки отправленные из скриптов, поэтому переопределить их через ErrorDocument не получится. И 404 заголовок отправляется не только к некорректно набранному адресу, а еще к куча других ошибок, перегрузить все 404 ошибки одной страницы будет не правильно, а то может выйти что-то подобное. Link to comment Share on other sites More sharing options...
Одмин Posted September 6, 2014 Author Share Posted September 6, 2014 @siv1987, 403 работает нормально, но я так понял, что с 404 лучше не заморачиваться? Link to comment Share on other sites More sharing options...
siv1987 Posted September 6, 2014 Share Posted September 6, 2014 403 работает нормальноПри каких обстоятельствах он работает? При листинге категории, или при выводе какой нибудь ошибки форума с кодом 403? Если при листинге категорий то естественно будет работать, эта системная ошибка сервера и ее можно перехватить через htaccess. Таким же образом можете отключить реврайт ссылок (мод_реврайт перехватывает все запросы) и запросить несуществующий адрес, тогда 404 ошибка тоже "сработает". Но в данном случае мод_реврайт перехватывает все несуществующие запросы и отправляет на index.php. 1 Link to comment Share on other sites More sharing options...
Одмин Posted September 6, 2014 Author Share Posted September 6, 2014 При каких обстоятельствах он работает?В .htaccess добавил: ErrorDocument 403 /403.html (403.html заблаговременно был создан в корне форума). При листинге категории, или при выводе какой нибудь ошибки форума с кодом 403?Запрет листинга никак не повлиял на вывод ошибки 403. Таким же образом можете отключить реврайт ссылок (мод_реврайт перехватывает все запросы) и запросить несуществующий адрес, тогда 404 ошибка тоже "сработает". Но в данном случае мод_реврайт перехватывает все несуществующие запросы и отправляет на index.php. Вы имеете ввиду RewriteEngine off? Link to comment Share on other sites More sharing options...
siv1987 Posted September 6, 2014 Share Posted September 6, 2014 Кстати, если нужна имена 404 ошибка при запросе несуществующего адреса, то вызов ее находится в контроллере /admin/sources/base/ipsController.php $this->registry->getClass('output')->showError( 'incorrect_furl', 404, null, null, 404 ); Можете сверстать свой шаблон с ошибкой в врапере форума. Можно вместо нее подключить сторонний файл. 1 Link to comment Share on other sites More sharing options...
siv1987 Posted September 6, 2014 Share Posted September 6, 2014 В .htaccess добавил:При каких обстоятельствах (случаях) срабатывает?Я вот зашел у вас в профиль пользователя. Доступ запрещен, а в заголовке ответа от сервера 403 ошибка, но у меня выводится стандартная ошибка форума. GET /user/907-helga/ 403 Forbidden Разницу видите? Если ошибка обрабатывается сервером (запрос каталога без индексного файла, блокировка ип через htaccess и другие действия которые вызывают 403 код) то ее можно перехватить через htaccess. В случае запросом несуществующих УРЛ, то мод реврайт захватывает их и отправляет форуму. И уже все ответы отправленные из форума не являются ошибкой сервера. Запрет листинга никак не повлиял на вывод ошибки 403.Что в вашем понимании значит "вывод ошибки 403"? Вы имеете ввиду RewriteEngine off?Да. Link to comment Share on other sites More sharing options...
Одмин Posted September 6, 2014 Author Share Posted September 6, 2014 @siv1987, я думаю, такие ошибки, как "запрет гостю к просмотру профиля пользователя" можно оставить на уровне форума. А ошибки, выдаваемые при попытке доступа к запрещенным от просмотра файлам (или директориям), можно осуществлять через ошибку, посредством сервера (403). И вообще, изначально, мне был интересен немного иной вопрос - чтобы при любых ошибках не выводились сигнатуры сервера в этих ошибках, ибо чревато. Посему, я озаботился вопросом создания своих страниц ошибок. Link to comment Share on other sites More sharing options...
siv1987 Posted September 6, 2014 Share Posted September 6, 2014 я думаю, такие ошибки, как "запрет гостю к просмотру профиля пользователя" можно оставить на уровне форума. А ошибки, выдаваемые при попытке доступа к запрещенным от просмотра файлам (или директориям), можно осуществлять через ошибку, посредством сервера (403).Эти ошибки обрабатываются на разных уровнях, поэтому и результаты разные. Хотя и то, и то имеет код 403 Forbidden. И вообще, изначально, мне был интересен немного иной вопросНу изначально вопрос сабжа был про то, как создать свою страницу с ошибками в случае некорректно набранного адреса без дефолтной страницы форума. Я вам объяснил почему появляется ошибка форума при запросе таких адресов, и почему без костылей в данном случае это сделать нельзя. Потом вы сказали что "403 работает нормально". Я вам объяснил почему 403 работает "нормально", и почему 404 работает "не нормально". Link to comment Share on other sites More sharing options...
Одмин Posted September 6, 2014 Author Share Posted September 6, 2014 @siv1987, спасибо большое. Я вас прекрасно понял. И ведь действительно, при отключении RewriteEngine (в положение Off), ошибка 404 работает везде (даже при обращении гостем к профилю зарегистрированного пользователя). Но ведь отключение RewriteEngine повлияет на другие функции .htaccess в mod_rewrite.c, коими учитывается именно рабочее положение RewriteEngine (On). Link to comment Share on other sites More sharing options...
Одмин Posted September 7, 2014 Author Share Posted September 7, 2014 Кстати, если нужна имена 404 ошибка при запросе несуществующего адреса, то вызов ее находится в контроллере /admin/sources/base/ipsController.phpНе подскажите, что там нужно поправить? Link to comment Share on other sites More sharing options...
siv1987 Posted September 7, 2014 Share Posted September 7, 2014 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; } 3 Link to comment Share on other sites More sharing options...
Одмин Posted September 7, 2014 Author Share Posted September 7, 2014 @siv1987, большое спасибо :) Link to comment Share on other sites More sharing options...
Одмин Posted September 7, 2014 Author Share Posted September 7, 2014 Если включен ЧПУА если ЧПУ не включён? Link to comment Share on other sites More sharing options...
siv1987 Posted September 7, 2014 Share Posted September 7, 2014 А если не включен то править ничего не нужно (см #6, но в данном случае не имеет смысла). Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now