简体   繁体   中英

Custom 404 error page -- for PHP pages only

I have a personalized page for 404 with htaccess

ErrorDocument 404 /404.php

It works fine, but it takes everything .jpg, .js, .css etc...
I would like it to just take the .php and do a normal 404 error for all others.

I didn't find that option anywhere.

Thank you very much.

Not sure but give this a try:

<Files ~ "\.php$">
    ErrorDocument 404 /404.php
</Files>

Quote from Files Directive documentation:

The <Files> directive limits the scope of the enclosed directives by filename.

There are a few possible approaches to this, but I would do one of the following:

You can use mod_rewrite , as suggested by @LazyOne, to redirect only files with a .php extension to your custom document:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f # Only redirect to error for files that don't exist
RewriteRule ^(.*)\.php$ /404.php [L]

Or you can direct everything through the PHP error handler as you already do, and use PHP to determine whether the requested resource is a PHP script or not:

<?php

  if (strtolower(substr($_SERVER['SCRIPT_URL'], -4)) != '.php') {
    // If the requested resource does not have a .php extension, include the standard error doc and exit
    include '404.html';
    exit;
  }

  // Handle .php 404s here

The disadvantage of this second approach is that you may need to rewrite the standard error document so that it used PHP to get dynamic information to display to the user, such and the requested resource path.

Utilizing the $_SERVER['REQUEST_URI'] , you can easily check the ending of the file that resulted in an error and then throw a header to a normal 404 if it doesn't correspond to your needs or just render a different 404

Put this in your 404.php file

$bad_url = $_SERVER['REQUEST_URI'];
$bad_extension = substr(strrchr($bad_url,'.'),1);

if($bad_extension != "php"){
    //Not PHP
}else{
    //PHP
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM