如果找不到請求的文件,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 /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,正如您在文章中很早提到的那樣,為未找到的任何內容提供靜態資源。