Единственный возможный способ, который мне известен для приведенного выше сценария, - это иметь такой тип php-кода в вашем index.php
:
<?php
if (pageNotInDatabase) {
header('Location: ' . $_SERVER["REQUEST_URI"] . '?notFound=1');
exit;
}
, а затем слегка изменить ваш .htaccess следующим образом:
Options +FollowSymlinks -MultiViews
RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{QUERY_STRING} !notFound=1 [NC]
RewriteRule ^(.*)$ index.php?p=$1 [NC,L,QSA]
Таким образом, Apache покажет страницу 404 по умолчанию для этого особого случая из-за того, что из кода php добавлен дополнительный параметр запроса ?notFound=1
, а при отрицательной проверке того же самого на странице .htaccess он не будет перенаправлен в индекс.php в следующий раз.
PS: URI, такой как /foo
, если он не найден в базе данных, в браузере станет /foo?notFound=1
.