htaccess 404时重定向

htaccess Redirect when 404

我有一个名为 /marker 的子目录,里面有一些 png 文件。现在我希望在尝试调用不存在的 png 时返回文件 /marker/standard.png。换句话说:例如,如果调用 /marker/doesntexist.png(不存在),则应传递 /marker/standard.png

听起来很简单,但是 RewriteRuleErrorDocument 的几次尝试都失败了。

有什么想法吗? 蒂亚

如果请求 /marker 目录中不存在的另一个 .png 文件,您可以执行以下操作来为 /marker/standard.png 提供服务。

这使用 mod_rewrite 并且应该靠近文档根目录中 .htaccess 文件的顶部。

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^marker/(?!standard\.png$).+\.png$ marker/standard.png [L]

我采取了额外的步骤来排除对 standard.png 本身的请求(使用否定前瞻),以防由于某种原因不存在。

请注意,这是一个 case-sensitive 字符串比较。例如。仅匹配 .png 个文件,不匹配 .PNG.

standard.png 被提供时,这自然会导致 200 OK 响应。如果您仍然需要 404 Not Found 状态,请改用 ErrorDocument(请参阅下一节)。


使用ErrorDocument

您还提到了 ErrorDocument 指令的使用。这是另一种解决方案,尽管它会导致 404 HTTP 响应状态,这可能是理想的也可能不是。

例如,为了将此 ErrorDocument 限制在 /marker 子目录中,然后在该子目录中创建一个额外的 .htaccess 文件,内容如下:

ErrorDocument 404 /marker/standard.png

对于 /marker 子目录的任何 non-existent 请求,这自然会为 standard.png 服务。要将此限制为 .png 请求,请仅将 ErrorDocument 包装在 <If> 表达式中。例如:

<If "%{REQUEST_URI} =~ /\.png$/">
    ErrorDocument 404 /marker/standard.png
</If>