Jump to content
Larry Ullman's Book Forums

Recommended Posts

Hello everyone!

I try to make a error page based on Larry code. but encountered a problem. There was a Problem with a redirect of this type:

 


$url = BASE_URL . 'index.php?p=error404';
    header("Location: $url");
    exit;
All your options exhausted.

Please suggest an algorithm of actions. How can I cope with it.

 

htaccess

# Script 2.7 - .htaccess
<IfModule mod_rewrite.c>

# Turn on the engine:
RewriteEngine on

# Set the base to this directory:
RewriteBase /ch02/

# Redirect certain paths to index.php:
RewriteRule ^(about|contact|this|that|search|error404)/?$ index.php?p=$1

</IfModule>

index.php

<?php # Script 2.4 - index.php

/* 
 *  This is the main page.
 *  This page includes the configuration file, 
 *  the templates, and any content-specific modules.
 */

// Require the configuration file before any PHP code:
require('config.inc.php');

// Validate what page to show:
if (isset($_GET['p'])) {
    $p = $_GET['p'];
} elseif (isset($_POST['p'])) { // Forms
    $p = $_POST['p'];
} else {
    $p = NULL;
}

// Determine what page to display:
switch ($p) {

    case 'about':
        $page = 'about.inc.php';
        $page_title = 'About This Site';
        break;
    
    case 'contact':
        $page = 'contact.inc.php';
        $page_title = 'Contact Us';
        break;
    
    case 'search':
        $page = 'search.inc.php';
        $page_title = 'Search Results';
        break;
		
		case 'error404':
        $page = 'error404.inc.php';
        $page_title = 'Error!';
        break;
    
    // Default is to include the main page.
    default:
        $page = 'main.inc.php';
        $page_title = 'Site Home Page';
        break;
        
} // End of main switch.

// Make sure the file exists:
if (!file_exists('./modules/' . $page)) {
    $page = 'main.inc.php';
    $page_title = 'Site Home Page';
}

// Include the header file:
include('header.html');

// Include the content-specific module:
// $page is determined from the above switch.
include('./modules/' . $page);

// Include the footer file to complete the template:
include('footer.html');
?>

Share this post


Link to post
Share on other sites

 

Hello everyone!

I try to make a error page based on Larry code. but encountered a problem. There was a Problem with a redirect of this type:

 

$url = BASE_URL . 'index.php?p=error404';
    header("Location: $url");
    exit;
All your options exhausted.

Please suggest an algorithm of actions. How can I cope with it.

 

htaccess

# Script 2.7 - .htaccess
<IfModule mod_rewrite.c>

# Turn on the engine:
RewriteEngine on

# Set the base to this directory:
RewriteBase /ch02/

# Redirect certain paths to index.php:
RewriteRule ^(about|contact|this|that|search|error404)/?$ index.php?p=$1

ErrorDocument 404 http://ch02/index.php?p=error404

</IfModule>

index.php

<?php # Script 2.4 - index.php

/* 
 *  This is the main page.
 *  This page includes the configuration file, 
 *  the templates, and any content-specific modules.
 */

// Require the configuration file before any PHP code:
require('config.inc.php');

// Validate what page to show:
if (isset($_GET['p'])) {
    $p = $_GET['p'];
} elseif (isset($_POST['p'])) { // Forms
    $p = $_POST['p'];
} else {
    $p = NULL;
}

// Determine what page to display:
switch ($p) {

    case 'about':
        $page = 'about.inc.php';
        $page_title = 'About This Site';
        break;
    
    case 'contact':
        $page = 'contact.inc.php';
        $page_title = 'Contact Us';
        break;
    
    case 'search':
        $page = 'search.inc.php';
        $page_title = 'Search Results';
        break;
		
		case 'error404':
        $page = 'error404.inc.php';
        $page_title = 'Error!';
        break;
    
    // Default is to include the main page.
    default:
        $page = 'main.inc.php';
        $page_title = 'Site Home Page';
        break;
        
} // End of main switch.

// Make sure the file exists:
if (!file_exists('./modules/' . $page)) {
    $page = 'main.inc.php';
    $page_title = 'Site Home Page';
}

// Include the header file:
include('header.html');

// Include the content-specific module:
// $page is determined from the above switch.
include('./modules/' . $page);

// Include the footer file to complete the template:
include('footer.html');
?>

 

 

 

Share this post


Link to post
Share on other sites

I would try

ErrorDocument 404 /error404

You shouldn't need to have the hostname in the ErrorDocument value and you should use the rewrite version just to be clean about it.

Share this post


Link to post
Share on other sites

Hello Larry,

on a local server, I could not get the result, error page-404, and did not know what to do next.

Thanks Larry for your book recommendation.

Share this post


Link to post
Share on other sites

Hello!
I apologize for missing so long.
artsite1 my site.
Error log :

[Mon Mar 20 15:49:53.618600 2017] [ssl:warn] [pid 2384:tid 232] AH01909: artsite1:443:0 server certificate does NOT include an ID which matches the server name

Share this post


Link to post
Share on other sites

I am correcting my mistake.

Where: gtyugt.html - request for an existing page.

artsite1: 127.0.0.1 [21/Mar/2017:13:32:03 +0300] "GET /gtyugt.html HTTP/1.1" 404 1039 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:52.0) Gecko/20100101 Firefox/52.0"

Share this post


Link to post
Share on other sites

Ah, okay, thanks for clarifying. So you're going to a purposefully bad URL but it's not showing the 404 error page, correct? What is the URL at that point and what is being shown instead?

Share this post


Link to post
Share on other sites

Hello!

When you invoke an obviously non-existent page with index.php, then the apache produces a standard browser error. From any other page, there is a redirect to index.php.

 

Share this post


Link to post
Share on other sites

Okay, I tested this myself and here's what worked:

# Script 2.7 - .htaccess
<IfModule mod_rewrite.c>

# Turn on the engine:
RewriteEngine on

# Set the base to this directory:
RewriteBase /ch02/

# Redirect certain paths to index.php:
RewriteRule ^(about|contact|this|that|search|error404)/?$ index.php?p=$1

ErrorDocument 404 /ch02/index.php?p=error404
</IfModule>
Keep in mind that I'm using http://localhost/ch02/about (for example) as my URLs. You'll need to tweak this accordingly. And despite using RewriteBase, I had to add the base to the error URL.

Share this post


Link to post
Share on other sites

Hello Larry,

Thank you for attention ! Does not work. What is the reason I will understand. The browser displays a standard error "Object not found!".

Share this post


Link to post
Share on other sites

Could you share the .htaccess file that you're using? What URL are you trying? And does any redirection of that URL occur?

Share this post


Link to post
Share on other sites

My file .htaccess

# Script 2.7 - .htaccess
<IfModule mod_rewrite.c>

# Turn on the engine:
RewriteEngine on

# Set the base to this directory:
RewriteBase /artsite1/

# Redirect certain paths to index.php:
RewriteRule ^(about|contact|this|that|search|error404)/?$ index.php?p=$1

ErrorDocument 404 /artsite1/index.php?p=error404

</IfModule>

My URL: http: //artsite1/index.php. And erroneous requests for an existing file, For example http: //artsite1/abrakadabra.html. Yes, redirection proceeds.

Share this post


Link to post
Share on other sites

Okay, to start, if the URL for the site is http://artsite1, then you don't want to use RewriteBase /artsite1/ because the site is effectively in the root. 

 

Similarly, your ErrorDocument ends up being incorrect as it points to http://artsite1/artsite1/index.php

Thank you ! Fixed bug. But there is no redirect. Now I'm studying the settings of my OpenServer. Maybe the reason is there.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×