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

Apache httpd предоставляет ответ 200 со статическим ресурсом, если запрошенный файл не найден

Я ищу способ настроить httpd-сервер для ответа изображением, если запрошенный файл не найден. Я знаю, что это можно просто сделать:

ErrorDocument 404 "/static/thumbnails/404.png"

Этот работает, но сервер отвечает кодом 404, и это то, от чего я пытаюсь избавиться (в идеале, если сервер вернет 200).

Я пробовал выполнить простое перенаправление следующим образом:

Redirect "for/sure/doesnt/exist" "/static/thumbnails/blank-thumbnail.png"
ErrorDocument 404 "/for/sure/doesnt/exist"

Но это не работает (и даже если это сработает - вернет ответ 302), поскольку это то, что возвращается для GET http://mydomain/static/thumbnails/xxxx.png:

Не найден Запрошенный URL / статический / эскизы / любой не был найден на этом сервере.

Кроме того, при попытке использовать ErrorDocument для обработки запроса произошла ошибка 302 Found.

Что интересно, в журнале Apache указано, что код статуса для этого ответа - 302:

[16 / Янв / 2018: 08: 39: 56 -0500] "GET / static / thumbnail / any HTTP / 1.1" 302 - "-" "curl / 7.47.0"

Так выглядит, что Redirect действительно сработало, но я также уверен, что "/static/thumbnails/blank-thumbnail.png" путь правильный.

Есть ли способ без сценария обслуживать определенный статический ресурс (изображение в моем случае), если запрашиваемый ресурс не найден (вместо возврата 404)?

Возможно решение в этом: https://stackoverflow.com/questions/5190206/how-do-i-redirect-a-url-that-isnt-found-without-sending-a-404-header могу помочь тебе.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Это перезаписывает все, если это не файл / каталог / ссылка. На последнем этапе можно положить что угодно. И сервер будет сервировать его как 200.

Кажется, вы пытаетесь сделать две противоположные вещи. Если запрошенный ресурс не найден, ответ 200 будет ошибочным - 200 означает «все в порядке, я нашел то, что вы искали, и вот оно». Ответ 404 - это правильный ответ, вы хотите просто использовать ErrorDocument, как вы упомянули в самом начале своего сообщения, для обслуживания статического ресурса для чего-либо, что не найдено.