Здравствуйте. Сайт имеет следующую структуру: в корне индексный файл, в который, в зависимости от раздела, подгружаются файлы из папки /inc/ То есть http://family.local/about грузит /inc/about.inc.php, http://family.local/deps/srp/tasks грузит /inc/deps/srp/tasks.inc.php и так далее. Для понятных URL используется mod_rewrite: RewriteRule ^question/?$ question.php RewriteRule ^([A-Za-z0-9-]+)/?$ index.php?level1=$1 RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?level1=$1&level2=$2 RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ index.php?level1=$1&level2=$2&level3=$3 [L] Проблема заключается в следующем: при вызове несуществующей страницы, подходящей под правила mod_rewrite, не срабатывает ошибка 404. То есть, при вызове http://family.local/blabla пытается инклюдиться файл /inc/blabla.inc.php, в результате чего получается пустая страница. Требуется сделать так, чтобы ошибка срабатывала для тех адресов, файлы .inc.php которых не существуют на сервере. Заранее спасибо.
<? $level3 = $_GET['level3']; $level2 = $_GET['level2']; $level1 = $_GET['level1']; if (!isset($level1)) { $level1 = "index"; } if (isset($level3)) { $l3path = "inc/$level1/$level2/$level3.inc.php"; if (file_exists($l3path)) { $inc = $l3path; } else { /* header("HTTP/1.0 404 Not Found"); header('Location: /404'); */ } } elseif (isset($level2)) { $l2path = "inc/$level1/$level2.inc.php"; if (file_exists($l2path)) { $inc = $l2path; } else { /* header("HTTP/1.0 404 Not Found"); header('Location: /404'); */ } } else { $l1path = "inc/$level1.inc.php"; if (file_exists($l1path)) { $inc = $l1path; } else { /* header("HTTP/1.0 404 Not Found"); header('Location: /404'); */ } } ?> <div id="content"> <? include($inc); ?> </div>
ты же сам сказал ему так делать? Что теперь жалуешься? Проверяй, есть ли такой файл в папке, и если нет то шли 404.
Вобщем-то я так и делаю: else { header("HTTP/1.0 404 Not Found"); header('Location: /404'); } По сути происходит редирект, а нужно чтобы в строке оставался запрашиваемый адрес.