Укороченная версия: Мы хотели бы, чтобы Apache обнаруживал, когда дается статус 500, и вместо этого возвращал что-то вроде 404. Есть ли способ сделать это?
Более длинная версия: На этих серверах работают приложения, которые не являются нашими, и недавно они не прошли сканирование на соответствие PCI из-за 500 ошибок состояния, которые они могут выдать, если вы возьмете с собой хост. В конечном итоге мы переместим их в другую сеть, чтобы они не были совместимы с PCI, но в краткосрочной перспективе мы хотели бы быстро исправить и просто не отображать статус 500, который возвращают приложения. Оба приложения, с которыми это происходит, принимают запросы через Apache.
Я надеюсь / предполагаю, что это будет правило mod_rewrite, но не знаю, как изменить mod_rewrite на основе кода состояния.
Если я правильно понимаю, вы хотите отслеживать статус ошибки 500 в журналах, одновременно представляя обычную страницу поиска ошибок своим клиентам и сканерам.
Некоторые интернет-магазины делают это, чтобы «скрыть» более серьезные ошибки на своих сайтах от злоумышленников. Страница, которая генерирует статус ошибки 500, может быть хорошей целью для DOS-атаки. Сканируйте сайт, чтобы найти страницу, которая генерирует ошибку сервера 500, перебирайте эти страницы, снова и снова запускайте плохой код, подождите, пока база данных не расплавится внизу.
Вы можете представить настраиваемые страницы ошибок, используя ErrorDocument 500 yourerrorpage.html
Ошибка сканирования PCI из-за ошибки 500? Это немного странно. Тем не мение...
Настроить по умолчанию VirtualHost
(у вас уже должен быть такой), который ничего не служит; любые запросы к нему должны приводить к ошибке 404.
<VirtualHost *:80>
ServerName *
DocumentRoot /var/empty
</VirtualHost>
Лучше было бы использовать выходной фильтр, чем правило перезаписи.
Правило mod_rewrite должно было бы создать подзапрос на стороне, а затем решить, какой URL-адрес использовать, в зависимости от того, что он вернул. Если подзапрос будет успешным, содержимое все равно будет отброшено, и вам придется повторить транзакцию в качестве основного запроса.
С другой стороны, выходной фильтр может перехватить ответ 500 и преобразовать его в ответ 404.