Custom 404 Error Page with Permalinks plugin
5 posts by 3 authors in: Forums > CMS Builder: Plugins & Add-ons
Last Post: July 4, 2018 (RSS)
By gversion - June 25, 2018
Hello,
I am trying to customise the 404 error page used by the permalinks plugin.
If I uncomment the variable $alternate404Url and redirect users to my custom page (e.g. 404.php) then when I check the headers of a non existent page using an online tool (such as https://monitorbacklinks.com/seo-tools/http-header-status-check) I receive a 302 found header.
My custom 404 error page is using the following code
<?php
// load viewer library
$libraryPath = 'cmsb/lib/viewer_functions.php';
$dirsToCheck = array('/opt/bitnami/apache2/htdocs/','','../','../../','../../../');
foreach ($dirsToCheck as $dir) { if (@include_once("$dir$libraryPath")) { break; }}
if (!function_exists('getRecords')) { die("Couldn't load viewer library, check filepath in sourcecode."); }
header("HTTP/1.0 404 Not Found");
$REDIRECT_URL = _permalink_getRedirectUrl();
$title = '404 Error: Page Not Found ';
require('header.php');
?>
<div id="main-content" class="row">
<div class="wrapper">
<div class="col-xs-12">
<h1 class="search-results"><strong>Page Not Found</strong></h1>
</div>
<div class="col-xs-12">
<hr class="visible-xs visible-sm" />
</div>
<div class="col-xs-12">
<div class="alert alert-danger">The requested URL was not found on this server.</div>
</div>
</div> <!-- /wrapper -->
</div> <!-- /main-content -->
<?php require('footer.php'); ?>
I thought by specifying header("HTTP/1.0 404 Not Found"); I would return a 404 header. If I check the headers of my custom 404 page then they do return as a 404 but if I check the headers of a non existent page then it's a 302. I guess because it is redirecting...??
Can someone please help?
Thank you,
Greg
By leo - June 25, 2018
Hi Greg,
Yes, it is because of the redirecting. I would recommend you modify the 404 page to add the libraries you need.
Thanks,
interactivetools.com
By gversion - June 28, 2018
Thanks, Leo.
Could the plugin code not be changed slightly as follows:
$alternate404Url = "http://www.mydomain.com/404.php";
if (@$alternate404Url) {
dieWith404(file_get_contents($alternate404Url));
exit;
}
Would that still redirect and then correctly send the 404 headers?
Thanks,
Greg
By gregThomas - July 2, 2018
Hey Greg,
That would work, but I'd recommend including the file path to the file instead of using the URL:
$alternate404Url = "/path/to/404.php";
if (@$alternate404Url) {
dieWith404(file_get_contents($alternate404Url));
exit;
}
This is because there is a small chance that the file_get_contents to the URL might cause a 404, which could potentially cause an infinite loop.
Cheers,
Greg
PHP Programmer - interactivetools.com