![如果未找到请求的文件,Apache httpd 将提供 200 响应和静态资源](https://linux22.com/image/716199/%E5%A6%82%E6%9E%9C%E6%9C%AA%E6%89%BE%E5%88%B0%E8%AF%B7%E6%B1%82%E7%9A%84%E6%96%87%E4%BB%B6%EF%BC%8CApache%20httpd%20%E5%B0%86%E6%8F%90%E4%BE%9B%20200%20%E5%93%8D%E5%BA%94%E5%92%8C%E9%9D%99%E6%80%81%E8%B5%84%E6%BA%90.png)
我正在寻找一种方法来配置 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(正如您在帖子中很早就提到的那样)来为未找到的任何内容提供静态资源。