如何在.htaccess中正确映射不存在的文件?

时间:2009-05-13 15:06:21

标签: .htaccess mod-rewrite

重复:

  

How to rewrite non existant files to ‘default’ files? (.htaccess)

如果文件不存在,我将如何“重写”到某个位置?我不想使用404重定向,而是实际重写。

例如,假设它是一个带图像的目录。如果找不到图像,那么它会重写为默认图像吗?

即,

images/1.jpg 
images/2.jpg 
images/default.jpg

如果有人试图访问“website.com/images/3.jpg”, 因为那不存在,我希望它去: “website.com/images/default.jpg”

这是之前的“已发布”解决方案,但效果不佳:

RewriteCond %{REQUEST_FILENAME} !-f [NC] 
RewriteRule /images/.* /images/error.jpg [L]

它仍然没有“获得”正确的图像(只是作为常规的404请求)。

4 个答案:

答案 0 :(得分:2)

RewriteCond %{REQUEST_FILENAME} !-f [NC] 
RewriteRule ^images/.* /images/error.jpg [L]

显然,如果丢失的文件位于/ images / ...下,这只会重定向,但您可以根据自己的需要轻松修改

答案 1 :(得分:2)

嗯,你以前发布的解决方案是在正确的轨道上,但它有一些轻微的疯狂。试试这个:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule images/.* /images/default.jpg [L]

答案 2 :(得分:1)

如果文件确实不存在,您应该更好地发送404状态代码,而不仅仅是404以外的状态代码替换。否则,URL将被视为有效。

因此,在您的情况下,我建议您将images目录的ErrorDocument设置为默认图片:

<Directory "/path/to/your/images/">
    ErrorDocument 404 /images/default.jpg
</Directory>

但请注意,<Directory> block仅在服务器或虚拟主机配置上下文中可用,而不是在每个目录上下文中(因此.htaccess)。

如果您无法使用上述内容,则可以使用自定义脚本作为自定义错误文档来检查已请求的URL(请参阅Request_URI环境变量)并在必要时发送默认图像。然后ErrorDocument指令应如下所示:

ErrorDocument 404 /your-error-404.script

答案 3 :(得分:0)

为您的图片文件夹重新编写404文档:

(在图片文件夹中的.htaccess文件中)
ErrorDocument 404 default.jpg