Shaun Mccran

My digital playground

21
A
P
R
2011

Using URL re-writing to provide friendly 404 error screens

A while ago I wrote a blog entry about changing the 404, page not found, handler in IIS ( http://www.mccran.co.uk/index.cfm/2010/3/2/Changing-the-404-template-handler-in-IIS). More recently I've moved some hosting to a Linux based server, and I didn't have the same server side options available to me.

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:

view plain print about
1RewriteRule ^/contact/$ index.cfm?go=contact

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:

view plain print about
1# Error handlers
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:

view plain print about
1ErrorDocument errorNumber path/file.htm

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:

view plain print about
1ErrorDocument 404 /error.htm

Some of the more common server error responses are:

view plain print about
1401 - Authorization Required
2400 - Bad request
3403 - Forbidden
4404 - Wrong page
5500 - Internal Server Error

TweetBacks
Comments (Comment Moderation is enabled. Your comment will not appear until approved.)
# Posted By Kabi Kumar | 11/06/2015 22:54
Back to top