За последние 24 часа нас посетили 17693 программиста и 1658 роботов. Сейчас ищут 919 программистов ...

Проблема с .htaccess и include()

Тема в разделе "Прочие вопросы по PHP", создана пользователем 6apxat, 22 июл 2008.

  1. 6apxat

    6apxat Активный пользователь

    С нами с:
    22 июл 2008
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте.
    Сайт имеет следующую структуру: в корне индексный файл, в который, в зависимости от раздела, подгружаются файлы из папки /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 которых не существуют на сервере.

    Заранее спасибо.
     
  2. CAMOrOH13

    CAMOrOH13 Активный пользователь

    С нами с:
    22 июл 2008
    Сообщения:
    17
    Симпатии:
    0
    Пришли отрывок кода, где подключаешь файлы /inc/....
     
  3. 6apxat

    6apxat Активный пользователь

    С нами с:
    22 июл 2008
    Сообщения:
    4
    Симпатии:
    0
    <?
    $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>
     
  4. shreck

    shreck Активный пользователь

    С нами с:
    7 авг 2007
    Сообщения:
    479
    Симпатии:
    0
    Адрес:
    Россия, Саратов
    ты же сам сказал ему так делать? Что теперь жалуешься?

    Проверяй, есть ли такой файл в папке, и если нет то шли 404.
     
  5. 6apxat

    6apxat Активный пользователь

    С нами с:
    22 июл 2008
    Сообщения:
    4
    Симпатии:
    0
    Вобщем-то я так и делаю:

    else { header("HTTP/1.0 404 Not Found"); header('Location: /404'); }

    По сути происходит редирект, а нужно чтобы в строке оставался запрашиваемый адрес.
     
  6. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Ну дак не редирект делай, а грузи страницу с 404 ошибкой.
     
  7. 6apxat

    6apxat Активный пользователь

    С нами с:
    22 июл 2008
    Сообщения:
    4
    Симпатии:
    0
    спасибо