What is the final/best recommendation for how to serve favicon.ico in ASP.NET MVC?
I am currently doing the following:
Adding an entry to the very beginning of my RegisterRoutes method:
routes.IgnoreRoute("favicon.ico");
Placing favicon.ico in the root of my application (which is also going to be the root of my domain).
I have two questions:
- Is there no way to put the favicon.ico somewhere other than the root of my application. It's pretty icky being right there at the same level as
Content
andControllers
. Is this
IgnoreRoute("favicon.ico")
statement sufficient - or should I also do the following as discussed in a blog post from Phil Haack. I'm not aware of ever having seen a request to favicon.ico in any directory other than the root - which would make this unnecessary (but it's good to know how to do it).routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});
1) You can put your favicon where you want and add this tag to your page head
although some browsers will try to get the favicon from /favicon.ico by default, so you should use the IgnoreRoute.
2) If a browser makes a request for the favicon in another directory it will get a 404 error wich is fine and if you have the link tag in answer 1 in your master page the browser will get the favicon you want.
Placing favicon.ico in the root of your domain only really affects IE5, IIRC. For more modern browsers you should be able to include a link tag to point to another directory:
You can also use non-ico files for browsers other than IE, for which I'd maybe use the following conditional statement to serve a PNG to FF,etc, and an ICO to IE: