Назад | Перейти на главную страницу

Перенаправить статус Apache 500 на 404

Укороченная версия: Мы хотели бы, чтобы Apache обнаруживал, когда дается статус 500, и вместо этого возвращал что-то вроде 404. Есть ли способ сделать это?

Более длинная версия: На этих серверах работают приложения, которые не являются нашими, и недавно они не прошли сканирование на соответствие PCI из-за 500 ошибок состояния, которые они могут выдать, если вы возьмете с собой хост. В конечном итоге мы переместим их в другую сеть, чтобы они не были совместимы с PCI, но в краткосрочной перспективе мы хотели бы быстро исправить и просто не отображать статус 500, который возвращают приложения. Оба приложения, с которыми это происходит, принимают запросы через Apache.

Я надеюсь / предполагаю, что это будет правило mod_rewrite, но не знаю, как изменить mod_rewrite на основе кода состояния.

Если я правильно понимаю, вы хотите отслеживать статус ошибки 500 в журналах, одновременно представляя обычную страницу поиска ошибок своим клиентам и сканерам.

Некоторые интернет-магазины делают это, чтобы «скрыть» более серьезные ошибки на своих сайтах от злоумышленников. Страница, которая генерирует статус ошибки 500, может быть хорошей целью для DOS-атаки. Сканируйте сайт, чтобы найти страницу, которая генерирует ошибку сервера 500, перебирайте эти страницы, снова и снова запускайте плохой код, подождите, пока база данных не расплавится внизу.

Вы можете представить настраиваемые страницы ошибок, используя ErrorDocument 500 yourerrorpage.html

http://httpd.apache.org/docs/2.2/custom-error.html

Ошибка сканирования PCI из-за ошибки 500? Это немного странно. Тем не мение...

Настроить по умолчанию VirtualHost (у вас уже должен быть такой), который ничего не служит; любые запросы к нему должны приводить к ошибке 404.

<VirtualHost *:80>
ServerName *
DocumentRoot /var/empty
</VirtualHost>

Лучше было бы использовать выходной фильтр, чем правило перезаписи.

Правило mod_rewrite должно было бы создать подзапрос на стороне, а затем решить, какой URL-адрес использовать, в зависимости от того, что он вернул. Если подзапрос будет успешным, содержимое все равно будет отброшено, и вам придется повторить транзакцию в качестве основного запроса.

С другой стороны, выходной фильтр может перехватить ответ 500 и преобразовать его в ответ 404.