如果未找到请求的文件,Apache httpd 将提供 200 响应和静态资源

如果未找到请求的文件,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),是否有任何方法(无需脚本)来提供定义的静态资源(在我的情况下是图像)?

答案1

也许解决方案是这样的: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 提供服务。

答案2

您似乎在尝试做两件相互矛盾的事情。当未找到所请求的资源时,200 响应将是错误的 - 200 表示“一切正常,我找到了您要查找的内容,它就在这里”。404 响应是正确的响应,您只需使用 ErrorDocument(正如您在帖子中很早就提到的那样)来为未找到的任何内容提供静态资源。

相关内容