Почему битра отвечает «200 OK» на несуществующие в url-е section_code?
В битркисе в настройках каталога в качестве детальной информации проставлено #SECTION_CODE#/#ELEMENT_CODE#/
А если задать #SECTION_CODE_PATH#/#ELEMENT_CODE#/ , то всё опять-таки хороошо — выдает 404.
На всякий случай конфиг nginx:
server < listen 80; server_name mytestsite.ru; return 301 https://$host$request_uri; >server < listen 443 ssl; ssi on; server_name mytestsite.ru; charset off; index index.php; fastcgi_read_timeout 600; root /var/www/mytestsite; set $php_sock unix:/run/php/php7.3-fpm.sock; location / < try_files $uri $uri/ @bitrix; >location ~* /upload/.*\.(php|phtml|pl|asp|aspx|cgi|dll|exe|shtm|shtml|fcg|fcgi|fpl|asmx|pht|py|psp|rb|var)$ < types < text/plain text/plain php phtml pl asp aspx cgi dll exe ico shtm shtml fcg fcgi fpl asmx pht py psp rb var; >> location ~ \.php$ < try_files $uri @bitrix; fastcgi_pass $php_sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f wm@test.ru"; include fastcgi_params; >location @bitrix < fastcgi_pass $php_sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root/bitrix/urlrewrite.php; fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f wm@test.ru"; >location ~* /bitrix/admin.+\.php$ < try_files $uri @bitrixadm; fastcgi_pass $php_sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f wm@test.ru"; include fastcgi_params; >location @bitrixadm < fastcgi_pass $php_sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root/bitrix/admin/404.php; fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f wm@test.ru"; >location = /favicon.ico < log_not_found off; access_log off; >location = /robots.txt < allow all; log_not_found off; access_log off; ># # block this locations for any installation # # ht(passwd|access) location ~* /\.ht < deny all; ># repositories location ~* /\.(svn|hg|git) < deny all; ># bitrix internal locations location ~* ^/bitrix/(modules|local_cache|stack_cache|managed_cache|php_interface) < deny all; ># upload files location ~* ^/upload/1c_[^/]+/ < deny all; ># use the file system to access files outside the site (cache) location ~* /\.\./ < deny all; >location ~* ^/bitrix/html_pages/\.config\.php < deny all; >location ~* ^/bitrix/html_pages/\.enabled < deny all; ># Intenal locations location ^~ /upload/support/not_image < internal; ># Cache location: composite and general site location ~* @.*\.html$ < internal; # disable browser cache, php manage file expires -1y; add_header X-Bitrix-Composite "Nginx (file)"; ># Player options, disable no-sniff location ~* ^/bitrix/components/bitrix/player/mediaplayer/player$ < add_header Access-Control-Allow-Origin *; ># Accept access for merged css and js location ~* ^/bitrix/cache/(css/.+\.css|js/.+\.js)$ < expires 30d; error_page 404 /404.html; ># Disable access for other assets in cache location location ~* ^/bitrix/cache < deny all; ># Use nginx to return static content from s3 cloud storage # /upload/bx_cloud_upload/...amazonaws.com/ # Static content location ~* ^/(upload|bitrix/images|bitrix/tmp) < expires 30d; >location ~* \.(css|js|gif|png|jpg|jpeg|ico|ogg|ttf|woff|eot|otf)$ < error_page 404 /404.html; expires 30d; >location = /404.html < access_log off ; >>
- Вопрос задан более трёх лет назад
- 239 просмотров
Битрикс. Код ответа 200 при недоступной базе. Кто решал подобную проблему?
Достался «проект отличного качества». Смесь битрикса и самописного кода. Нашел похожий вопрос, но ответа нет. Пытаюсь понять. Это проблема битрикса в принципе или это результат кастомных изменений поверх? Пока мысль полезть в драйвер подключения к базе и там как то отлавливать. 1С-Битрикс: Управление сайтом 19.0.700
Отслеживать
задан 2 авг в 4:59
11 4 4 бронзовых знака
Пока похоже на то, что страница у вас доступна, отсюда и статус 200, а при недоступной БД ошибка не обрабатывается в том смысле, чтобы выводить 500 — Internal Server Error или ещё что-то в том же роде. Больше похоже на кастомные настройки при подключении к БД, но это не точно. ))
2 авг в 5:04
А в чём, собственно, состоит проблема? Вы хотите, чтобы сайт падал?
2 авг в 10:01
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
При всех ошибках с подключением к базе данных битрикс бросает исключение типа Bitrix\Main\DB\ConnectionException. Её можно ловить и обрабатывать.
Если не предпринять специальных мер, то ошибка подключения возникнет при инициализации ядра, до того как будут подключены компоненты и шаблоны сайта, и там же будет обработана.
Поэтому где-то в начале /local/php_interface/init.php добавляем следующие строки:
try < \Bitrix\Main\UserTable::getRow([]); >catch (\Bitrix\Main\DB\ConnectionException $e)
То есть пробуем прочитать любую строку из таблицы юзеров, а если возникает ошибка подключения, то обрабатываем её.
Отдает код ответа 200 вместо 404
Битрикс не отдает 404 ответ на несуществующие страницы.
_www.site.ru/news/?4546726456454564 такой страницы нет но ответ сервера 200 (открывается страница /news/)
и так по другим страницам и комбинациям. подскажите плз как быть, как сделать отработку нормальную 404 ответа сервера.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Главная отдает код ответа 404
Помогите пожалуйста, что может быть http://kosmostil.ru выдает 404 вместо 200, только главная.
Вместо информации о товаре в карточке блок 404 ошибки
Возникла проблема с карточками товара: блок с информацией о товаре отображается как 404, а все.
Код ответа сервера страницы 404
Доброго времени суток дорогие фомурчане-программисты!На моем сайте код ответа сервера страницы 404.
Код ответа несуществующей страницы перестал быть 404
Граждане сайтостроители, может кто из вас сталкивался с подобным. Подскажите пожалуйста, какие.
Регистрация: 15.04.2013
Сообщений: 244
Страница существует. Вы ведь находитесь на news/index.php, а то что после вопроса уже в $_GET, и не важно что Вы там передаете. Я знаю можно в компоненте включить редирект на 404 если элемент или раздел не найден.
1С-Битрикс & 404 Not found — UPDATE
В обновлении модуля «Информационные блоки» v15.5.1 от 24.05.2015 помимо всего прочего были обновлены компоненты bitrix:catalog, bitrix:news.
Данные компоненты «научились» работать с 404й ошибкой! Мы очень давно этого ждали и на безрыбье пользовались собственным решением описанным тут.
Наконец пришло время когда можно отказаться от собственного костыля, а обработку ошибки отдать системе, проверим что же все таки изменилось и как с этим работать.
Обновление системы/шаблонов
Во-первых нужно обновиться, а затем пропатчить свои кастомные шаблоны, потому что в настройках появились новые ключи, их нужно передать из комплексного компонента в обычные.
"MESSAGE_404" => $arParams["MESSAGE_404"], "SET_STATUS_404" => $arParams["SET_STATUS_404"], "SHOW_404" => $arParams["SHOW_404"], "FILE_404" => $arParams["FILE_404"],
Настройка компонентов
Переходим к настройкам компонентов. Сразу прокрутим вниз до блока «Настройки 404 ошибки» (скриншот 1).
Ранее этого блока не было, рассмотрим его параметры.
- «Установить статус 404» — собственно устанавливает соответствующий статус.
- «Показ специальной страницы» — если выбрать данный чек, то появится поле ввода для пути к странице ошибки 404.
- «Сообщение для показа» — тут вводится текст, который будет выведен пользователю когда появляется 404я ошибка. По умолчанию данные берутся из компонента.
Если выбран вариант показа специальной страницы, то при возникновении 404й ошибки, на страницу, без изменения URL, будет подгружена указанная страница, либо /404.php по умолчанию.
Если заполнить поле сообщения, то при возникновении 404й ошибки, на месте компонента будет выведено соответствующее сообщение.
«Не лучше костыля»
Вроде бы решение хорошее и даже работает, но давайте копнем глубже. Начнем с компонента bitrix:catalog, с настройками 404й ошибки вроде все ясно, но как работает метод с разными вариантами построения URL?
Первый вариант настройки URL
Разберем первый вариант построения URL для секций и элементов, блок «Управление адресами страниц», в данном случаи все элементы инфоблока находятся в корне, а секции выстраиваются в цепочку (скриншот 2).
Посмотрим как компонент будет реагировать на URL следующих типов:
- «/models/section1/что-то-не-то/» — 404
- «/models/что-то-не-то/section1/» — 404
- «/models/что-то-не-тоsection1/» — 404
- «/models/section1/что-то-не-то/section2/» — 404
- «/models/element/что-то-не-то/» — 404
- «/models/что-то-не-то/element/» — 404
- «/models/что-то-не-тоelement/» — 404
И подобные комбинации будут адекватно отдавать 404ю ошибку.
Второй вариант настройки URL
Разберем второй вариант построения URL для секций и элементов, блок «Управление адресами страниц», в данном случаи все элементы инфоблока находятся в своих секциях, а секции находятся в корне (скриншот 3).
Посмотрим как компонент будет реагировать на URL следующих типов:
- «/models/section1/что-то-не-то/» — 404
- «/models/что-то-не-то/section1/» — 404
- «/models/что-то-не-тоsection1/» — 404
- «/models/element/что-то-не-то/» — 404
- «/models/что-то-не-то/element/» — 200 OK
- «/models/section/что-то-не-то/element/» — 404
- «/models/что-то-не-тоelement/» — 404
Как видно из примера, при такой настройке между секцией и элементом, в URL можно написать что угодно и система это «проглотит». Ситуацию можно исправить только заменив #SECTION_CODE# на #SECTION_CODE_PATH#.
Компонент bitrix:news
Он тоже получил обновление, но как и раньше, очень плохо работает с секциями, а следовательно никакой адекватной обработки 404х ошибок с их участием нет.
Итог
В общем данное обновление полностью закрывает необходимость использования собственного решения. Но на этом все, поддержки некоторых видов настроек URL как не было, так и нет, компонент bitrix:news как и раньше — в пролете.
