This repository contains a "generic" HTTP error page. It's written in PHP/HTML and can be used for most any error page.
- A single file for all 40X HTTP errors
- A JSON file contains the error codes and messages
- Two options for the page background:
- A background image, randomly selected from a "pool" of images.
- A moving gradient of four random colors.
- All files (except
.htaccess
) are kept in a single folder - Easy to copy to a website and use. You will only need to edit the
.htaccess
file - An option to redirect automatically to a different page
Optional Page Backgrounds:
Two installation locations are possible. The first is a "local" location on an PC or NAS hosted HTTP server, and the second is on a "live" server.
For testing on a PC this will require the installation and setup of XAMPP or MAMP. I prefer XAMPP.
Sometimes using a local web server can be frustrating because of the path where the document root is located. It would possible mean that you would have to place your repo folder(s) in a specific location. For example - c:\xampp\htdocs
.
But that problem is easily fixed. Like Linux, Windows has the ability to create folder junctions (i.e "symbolic links" in Linux). So that means that your repositories (or other projects) can be located anywhere on the PC where your local web server is running. Just make a junction in your document root to access it via HTTP.
NOTE: Typically there are no SSL certificates in that type of installation, which is OK because this project does not require SSL.
At the top of /errpages/httperror.php
you find this -
// uncomment for testing
define('_DEBUG', false);
Change false
to true
and "debug" will be active. You can then load the page from the server and a 404
error will be simulated.
The /testhttperror.php
file can be used for testing error codes. First set _DEBUG
to false
in /errpages/httperror.php
, and then open /testhttperror.php
in your edtior -
<?php
// this script is for testing ./errpages/httperror.php, just
// change the code below
$testcode = 401;
// this just proves we can overwrite $_SERVER
$_SERVER['HTTPS'] = 'on';
$_SERVER['SERVER_PORT'] = 443;
// get the code to httperror.php...
putenv("REDIRECT_STATUS={$testcode}");
// test!
require_once './errpages/httperror.php';
?>
Just change $testcode
to the error code you want to test. Then point your browser to testhttperror.php
.
You might be familiar with a Linux hard link. The Window's equivalent is a junction. And they are particularly useful when keeping project folders organized in separate and possibly unrelated locations but you want to serve them with XAMPP(or MAMP) during development.
Some alternatives to this method are -
- Change XAMPP's document root path to the project's path, works for only one project at a time.
- Copy the project files into the document root after one or more edits.
Neither of those methods are easy to work with. But junctions are a lot easier and since they look like folders you can have as many (within the limits of Windows) you need.
Let's say you're working on two separate projects and want to test them locally using XAMPP. And they're found in the following paths -
Project A - C:\Users\a-user\Documents\Projects\some-project
Project B - D:\projects\web\customer-X\new-site
The following steps will create two project junctions :
- Open a command-line window and go to
C:\xampp\htdocs
- Run the following commands -
a)
mklink /j c:\xampp\htdocs\projecta C:\Users\a-user\Documents\Projects\some-project
b)mklink /j c:\xampp\htdocs\projectb D:\projects\web\customer-X\new-site
mklink
- command to create the junction
/j
- tells mklink to create a folder junction.
c:\xampp\htdocs\projectb
- a nonexistent folder, this is the junction
D:\projects\web\customer-X\new-site
- this is the target of the junction
-
Then in your browser go to -
http://
localhost
/projecta/index.html
--OR--http://
localhost
/projectb/index.html
NOTE: The "junctions" are permanent until deleted from the c:\xampp\htdocs
folder. You must use the rmdir
(Windows) to remove the junction and leave the files behind.
The repository .htaccess
file may require some editing. This would depend on whether or not you're using the local web server and where you placed the repository files(with or without junctions).
# IMPORTANT!!! : Must remove or comment out below when
# deploying on a live site! Or change this to match your
# local testing set up.
ErrorDocument 400 /tests/httperror/errpages/httperror.php
ErrorDocument 401 /tests/httperror/errpages/httperror.php
ErrorDocument 403 /tests/httperror/errpages/httperror.php
ErrorDocument 404 /tests/httperror/errpages/httperror.php
ErrorDocument 405 /tests/httperror/errpages/httperror.php
This part /tests/httperror
will need editing depending on how you set up the local server.
The file /errpages/httperror.json
contains the known HTTP error status codes and associated messages:
{
"400": ["", "400 - Bad Request","The syntax of the URL submitted by your browser could not be understood. Please verify the address and try again."]
,"401": ["", "401 - Unauthorized", "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."]
,"403": ["", "403 - Forbidden", "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."]
,"404": ["", "404 - Not Found", "The requested resource could not be found on this server. Please verify the address and try again."]
,"405": ["", "405 - Method Not Allowed", "The request method is known by the server but has been disabled and cannot be used."]
}
Edit as necessary. Status codes can be added, removed, or edited.
Most internet web servers have a common location for website files. It's typically located at /home/$USER/public_html
. Where $USER
is the user that owns the public_html
folder. Depending on your server's particular configuration that folder may be named differently or in a different location.
- Copy the
/errpages
folder and its contents to/home/$USER/public_html
(or its equivalent). You now have/home/$USER/public_html/errpages
. - Open the
.htaccess
file in the repository. - Copy this section out of it -
# PHP error page, edit as needed for a "live" site
###ErrorDocument 400 /errpages/httperror.php
###ErrorDocument 401 /errpages/httperror.php
###ErrorDocument 403 /errpages/httperror.php
###ErrorDocument 404 /errpages/httperror.php
###ErrorDocument 405 /errpages/httperror.php
-
Open your server's
.htaccess
file. It will be located in thepublic_html
folder. It is possible that your server does not have an.htaccess
. If that happens create a new one. -
Paste the lines from step 3 into your server's
htaccess
file. It should go near the top of the file, but it's not necessary to make it the first thing. Then edit what you pasted to look like this (comment###
removed) -
# PHP error page, edit as needed for a "live" site
ErrorDocument 400 /errpages/httperror.php
ErrorDocument 401 /errpages/httperror.php
ErrorDocument 403 /errpages/httperror.php
ErrorDocument 404 /errpages/httperror.php
ErrorDocument 405 /errpages/httperror.php
To see the error page working open your browser and go to -
http://your_server/
not_here
You should see a "400" error page.
Near the top of the httperror.php
file:
// can't have both!!
define('_IMG_POOL', false);
define('_GRADIENT', true);
Set _IMG_POOL
or _GRADIENT
to true
to select that background type.
- Development Environment:
- Host OS: Windows
- Local HTTP Server: XAMPP
- PHP 5.6