|
Using URL re-writing to provide friendly 404 error screens |
The problem I've had setting up a global 404 handler is that I can setup a front end friendly error page easily enough, but the method used to set it up hugely affects my ability to actually report what the error was.
For example in the Linux admin area I can specify a path to a 404 template, but this appears to actually relocate the user to the file specified, leaving any error and its associated information behind.
Similarly the 'onMissingTemplate' Application.cfc function only fires when a missing ColdFusion template is requested. Not just any old url that someone tries on my site.
What I eventually ended out with is a URL rewrite rule that catches any page request that does not match an already defined re-write rule.
So if a user asks for 'www.mysite.com/contact/' the following rule would be found and used:
But if they asked for any non matched rule, for example 'www.mysite.com/contactx/', or 'www.mysite.com/hack-attempt/' then the following rules would kick in and divert the user:
2RewriteRule ^([^/.]+)/$ index.cfm?go=error&error=$1
3RewriteRule ^([^/.]+)$ index.cfm?go=error&error=$1
The rule above just sends a user to my error page. It also appends the string matched in the Regular Expression to the end of the URL (error=$1).
This is so I can pick it up in a ColdFusion variable scope and log it, to actually let me know what the error was.
There is another documented way of using URL re-writing to redirect users to custom error pages. You can use custom error pages for any error type as long as you know its number by adding the following to your re-write file:
As an example if I had the file 'error.htm' in the root directory of my site and I wanted to use it for a 404 error I would use:
Some of the more common server error responses are:
2400 - Bad request
3403 - Forbidden
4404 - Wrong page
5500 - Internal Server Error
http://www.albela.in/movers-and-packers-delhi-to-d...