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:

Not Found The requested URL /static/thumbnails/any was not found on на этом сервере.

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

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

[16/Jan/2018:08:39:56 -0500] "GET /static/thumbnails/any HTTP/1.1" 302 - "-" "curl/7.47.0"

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

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

0
задан 16 January 2018 в 16:21
2 ответа

Возможно решение в этом: 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.

1
ответ дан 4 December 2019 в 16:03

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

0
ответ дан 4 December 2019 в 16:03

Теги

Похожие вопросы