Пользовательская страница ошибки 404 – только для страниц PHP

У меня есть персональная страница для 404 с htaccess

ErrorDocument 404 /404.php 

Он отлично работает, но он принимает все .jpg, .js, .css и т. Д.
Я бы хотел, чтобы он просто взял .php и сделал обычную ошибку 404 для всех остальных.

Я не нашел этот вариант нигде.

Большое спасибо.

Не уверен, но попробуйте:

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

Цитата из документации по файлам :

Директива <Files> ограничивает объем вложенных директив по имени файла.

Есть несколько возможных подходов к этому, но я бы сделал одно из следующего:

Вы можете использовать mod_rewrite , как это было предложено @LazyOne, для перенаправления только файлов с расширением .php в свой собственный документ:

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

Или вы можете направить все через обработчик ошибок PHP, как вы это делали, и использовать PHP для определения того, является ли запрошенный ресурс скриптом PHP или нет:

 <?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 

Недостатком этого второго подхода является то, что вам может потребоваться переписать стандартный документ ошибки, чтобы он использовал PHP для получения динамической информации для отображения пользователю, такого и запрошенного пути к ресурсам.

Используя $_SERVER['REQUEST_URI'] , вы можете легко проверить окончание файла, который привел к ошибке, а затем выбросить заголовок в нормальный 404, если он не соответствует вашим потребностям или просто отобразить другой 404

Поместите это в свой файл 404.php

 $bad_url = $_SERVER['REQUEST_URI']; $bad_extension = substr(strrchr($bad_url,'.'),1); if($bad_extension != "php"){ //Not PHP }else{ //PHP }