12

I want to show no_picture.png if requested picture does not exists. I should do it with .htaccess. Thanks a lot.

mTuran
  • 1,846
  • 4
  • 32
  • 58

4 Answers4

28
RewriteEngine On
RewriteCond %{REQUEST_URI} \.(jpg|jpeg|gif|png|ico)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .*$ /no_picture.png [L]

Let's break it down as to what each line means.

RewriteCond %{REQUEST_URI} \.(jpg|jpeg|gif|png|ico)$ [NC]

Check to see if the requested file is of a file extension in the parentheses (). In this case, we're testing to see if the file name ends in either .jpg, .jpeg, .gif, .png or .ico

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Check that the file is not there and it's also not a directory.

RewriteRule .*$ /no_picture.png [L]

If a requested resource/file passes all those tests, then it's an image that does not exist. So serve back the image of no_picture.png to the browser. This will keep the filename. If you want to redirect to the no_picture.png filename, change [L] to [R]

Community
  • 1
  • 1
random
  • 9,774
  • 10
  • 66
  • 83
4

this should also work:

<FilesMatch "\.(jpg|jpeg|png|gif)$">
ErrorDocument 404 "/no_picture.png"
</FilesMatch>
ownking
  • 1,956
  • 1
  • 24
  • 34
1
RewriteCond %{REQUEST_URI}  pic/(.*)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule pic/(.*)            pic/no_picture.png [L,E=STATUS:404]
martin.malek
  • 2,166
  • 2
  • 19
  • 31
1

In your /images/ directory, add this to your .htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule no_picture.png [L]

That says, if the requested file doesn't exist, rewrite it to no_picture.png

Brenton Alker
  • 8,947
  • 3
  • 36
  • 37
  • Won't that include non-existent HTML or other file types? – random Sep 09 '09 at 06:14
  • yes, it would for anything. Which is why I mentioned it was aimed at a specific images directory. It could be changed to match only certain file extensions (as other answers have done). – Brenton Alker Sep 09 '09 at 07:03