Я ищу способ настроить 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, как вы упомянули в самом начале своего сообщения, для обслуживания статического ресурса для чего-либо, что не найдено.