У меня есть персональная страница для 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 }