Apache-2.2

如果找不到請求的文件,Apache httpd 會使用靜態資源提供 200 響應

  • January 16, 2018

如果找不到請求的文件,我正在尋找一種配置 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 /static/thumbnails/any。

此外,在嘗試使用 ErrorDocument 處理請求時遇到 302 Found 錯誤。

有趣的是,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),有沒有什麼方法可以在沒有腳本的情況下為定義的靜態資源(在我的情況下為圖像)提供服務?

也許這個解決方案: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,正如您在文章中很早提到的那樣,為未找到的任何內容提供靜態資源。

引用自:https://serverfault.com/questions/892449