Не следует «перенаправлять» на документ об ошибке. Вместо этого вы должны сконфигурировать пользовательский документ об ошибках, используя директиву ErrorDocument
, тогда Apache ответит с помощью 404.php
, используя внутренний подзапрос, и убедитесь, что установлен правильный статус HTTP (ie. A 404, а не 301). .
Ваше условие проверки наличия файла .php
(до перезаписи) не является строго правильным, в зависимости от запрашиваемого URL-пути. REQUEST_FILENAME
содержит путь к файловой системе, с которым сопоставляется запрос, который не обязательно совпадает с запрашиваемым URL-путем.
Вместо этого попробуйте следующее, если ваш файл .htaccess
находится в документе root:
# Define custom error documents
ErrorDocument 404 /404.php
RewriteEngine on
# Rewrite - append .php extension if required.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule (.*) $1.php [L]