Bing Powered 404 for non-WordPress websites
Ok, after my last post on using the Bing Search Wrapper for handing 404 errors in WordPress I had several people tell me that while they liked the idea, they didn’t want to install WordPress just so they can have intelligent 404 errors. Several other people pinged me and suggested a way that you could use the Bing Search API to handle 404’s without WordPress. As a public service, I am going to try and bridge the gap between these two groups. Going on leads provided by friends, I have hammered out a solution that works with Apache and PHP.
Step 1: Write a 404 Handler page.
This technique is predicated on the fact that Apache lets you define your own pages for handling every error. In this example We will define a script, name it 404.php and place it in the web root.
You will notice that this is a very plain, black and white page. Feel free to decorate it to taste. The one on my personal site actually designed using my WordPress template so it matches my blog. (you can see it by clicking here, http://calevans.com/bing-rocks)
If you want to skip this step, here is a simple one, just copy and paste it. Make sure you put in your domain name and your Bing App Id
<?PHP
function __autoload($className)
{
$fileName = strtr($className,'_',DIRECTORY_SEPARATOR).".php";
include $fileName;
return;
}
$o = new Msft_Bing_Search('BING APP ID GOES HERE');
$o->setQuery('')
->setWebCount(10)
->setSource('web')
->setSite('YOUR DOMAIN GOES HERE')
;
$raw = $o->search();
$result = json_decode($raw);
?>
<!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" dir="ltr" lang="en-US">
<head profile="http://gmpg.org/xfn/11">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>calevans dot com 404 page</title>
</head>
<body>
<h3> I'm sorry, we couldn't find what you are looking for.</h3>
<p>However, here are the top 10 links from <a href="http://bing.com">Bing</a> for this site. I hope one of them is what you are looking for.</p>
<ol>
<?PHP
foreach($result->SearchResponse->Web->Results as $value) {
printf('<li><a href="%s">%s</a></li>',$value->Url,$value->Title);
}
?>
</ol>
</body>
</html>
Step 2: Configure Apache
If you are not familiar with Apache config files, this one is going to be a bit tricky. The only generic advice I can give you is, back everything up, they are only text files. Unless you delete things without backups, it’s really hard to do permanent damage. Oh and if you do manage to do permanent damage, I am not responsible.
My Apache is configured with name based virtual hosts. As such I have a separate Apache conf file for each domain and all the settings go in those files. As such, inside my <VirtualHost
tag I place the line:
ErrorDocument 404 /404.php
Now restart Apache and you too can type in:
http://example.com/bing-rocks
and get something that looks like this:
Or, if you are lucky enough to have a designer like the lovely and talented Kathy Then you may have something that looks like this:
Leave a comment
Use the form below to leave a comment:
Responses and Pingbacks
June 17th, 2010 at 10:50 am
[…] See the article here: Bing Powered 404 for non-WordPress websites | php|architect […]
July 19th, 2010 at 4:40 pm
Very helpful information. Thanks for the great share!
July 21st, 2010 at 5:14 pm
Hi, can these codes work on magento?
July 22nd, 2010 at 8:50 am
Hi,
Yes but since I am not familiar with the internals of Magento, I can’t show you how.
=C=