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请求)。
答案 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