Custom error pages

From DreamHost
Revision as of 08:32, 31 March 2010 by Rlparker (Talk | contribs)

Jump to: navigation, search
Note: For creating custom error pages on Dreamhost, see Creating custom error pages

Ideal Setup

To create custom error pages for your domain, in the .htaccess file located in the root of the server (which you may create if it doesn't exist), add a line like the following:

ErrorDocument 404 /error.php

This will redirct browsers that experience a 404 error (Not Found) to the file "error.php" located on the root of the server. With a little PHP coding you can set up this file to handle all error codes which will make them easier to manage. Alternatively, you can use the above line as an template to create separate custom error pages for each error.

The complete (and very long) list of errors is available here: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html Some of the most common errors you'll probably want to make entries for are:

  • 400 - Bad Request
  • 401 - Unauthorized
  • 403 - Forbidden
  • 404 - Not Found
  • 500 - Internal Server Error

.htaccess

To catch those errors, you would add the following to .htaccess for the domain you'd like to configure:

ErrorDocument 400 /error.php
ErrorDocument 401 /error.php
ErrorDocument 403 /error.php
ErrorDocument 404 /error.php
ErrorDocument 500 /error.php

error.php

Then, in error.php, add something like the following. This particular example is made for a wiki site, and if someone goes to http://www.example.com/Foo they are redirected to http://www.example.com/wiki/Foo. Anything after the last "/" is assumed to be a wiki article they were trying to get to.

<?php

$page_redirected_from = $_SERVER['REQUEST_URI'];  // this is especially useful with error 404 to indicate the missing page.
$server_url = "http://" . $_SERVER["SERVER_NAME"] . "/";
$redirect_url = $_SERVER["REDIRECT_URL"];
$redirect_url_array = parse_url($redirect_url);
$end_of_path = strrchr($redirect_url_array["path"], "/");

switch(getenv("REDIRECT_STATUS"))
{
	# "400 - Bad Request"
	case 400:
	$error_code = "400 - Bad Request";
	$explanation = "The syntax of the URL submitted by your browser could not be understood.  Please verify the address and try again.";
	$redirect_to = "";
	break;

	# "401 - Unauthorized"
	case 401:
	$error_code = "401 - Unauthorized";
	$explanation = "This section requires a password or is otherwise protected.  If you feel you have reached this page in error, please return to the login page and try again, or contact the webmaster if you continue to have problems.";
	$redirect_to = "";
	break;

	# "403 - Forbidden"
	case 403:
	$error_code = "403 - Forbidden";
	$explanation = "This section requires a password or is otherwise protected.  If you feel you have reached this page in error, please return to the login page and try again, or contact the webmaster if you continue to have problems.";
	$redirect_to = "";
	break;

	# "404 - Not Found"
	case 404:
	$error_code = "404 - Not Found";
	$explanation = "The requested resource '" . $page_redirected_from . "' could not be found on this server.  Please verify the address and try again.";
	$redirect_to = $server_url . "wiki" . $end_of_path;
	break;

	# "500 - Internal Server Error"
	case 500:
	$error_code = "500 - Internal Server Error";
	$explanation = "The server experienced an unexpected error.  Please verify the address and try again.";
	$redirect_to = "";
	break;
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

	<link rel="Shortcut Icon" href="/favicon.ico" type="image/x-icon" />
<?php
	if ($redirect_to != "")
	{
?>

	<meta http-equiv="Refresh" content="5; url='<?php print($redirect_to); ?>'">
<?php
	}
?>

	<title>Page not found: <?php print ($redirect_to); ?></title>

</head>
<body>

<h1>Error Code <?php print ($error_code); ?></h1>

<p>The <a href="http://en.wikipedia.org/wiki/Uniform_resource_locator">URL</a> you requested was not found. <?PHP echo($explanation); ?></p>

<p><strong>Did you mean to type <a href="<?php print ($redirect_to); ?>"><?php print ($redirect_to); ?></a>?</strong>  You will be automatically redirected there in five seconds.</p>

<p>You may also want to try starting from the home page: <a href="<?php print ($server_url); ?>"><?php print ($server_url); ?></a></p>

<hr />

<p><i>A project of <a href="<?php print ($server_url); ?>"><?php print ($server_url); ?></a>.</i></p>

</body>
</html>

Style the page so that it fits with the rest of your site and you're done with basic error handling.


External Links

$AA_REASON_PHRASE

\n

$AA_MESSAGE
\n

\n</body></html>";
       return true;
   } else return false;

}


// Tries to determine the error status code encountered by the server if(isset($_SERVER['REDIRECT_STATUS']) && $_SERVER['REDIRECT_STATUS']!='200') $AA_STATUS_CODE = $_SERVER['REDIRECT_STATUS'];


$AA_REQUEST_METHOD = $_SERVER['REQUEST_METHOD']; $AA_THE_REQUEST = htmlentities(strip_tags($_SERVER['REQUEST_URI'])); $AA_REASON_PHRASE = $ERROR_CODES[$AA_STATUS_CODE][0]; $AA_M_SR=array(array('INTERROR','REQURID','THEREQMETH'), array('The server encountered an internal error or misconfiguration '. 'and was unable to complete your request.',$AA_THE_REQUEST,$AA_REQUEST_METHOD)); $AA_MESSAGE=str_replace($AA_M_SR[0],$AA_M_SR[1],$ERROR_CODES[$AA_STATUS_CODE][1]);


// begin the output buffer to send headers and resonse ob_start(); @header("HTTP/1.1 $AA_STATUS_CODE $AA_REASON_PHRASE",1); @header("Status: $AA_STATUS_CODE $AA_REASON_PHRASE",1);

if(!aa_print_html($AA_STATUS_CODE)){ ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"> <head profile="http://gmpg.org/xfn/11">

   <title>Ooops!  I Can't find that</title>
   <meta name="robots" content="noindex" />

</head> <body id="home"> == External Links ==