в .htaccess (находиться в /) файл test.php там же <?php print_r($_GET); ?> RewriteEngine On RewriteRule ^(.*)/? test.php?one=$1 [L] Проблема: набираю в адресной строке http://hostname.ru/la-la-la/tam-tam-tam/ (... и тому подобное. Cоответственно этих папок реально нет) в ответ получаю файл с таким содержанием Array ( [one] => test.php ) я ожидал получить что-то вроде([one] = > /la-la-la/tam-tam-tam/)
кстати, ещё не понятно мне: если прописать так RewriteRule ^la-la-la/([^/]+)/?.* ... - то результат такой какой мне нужен, только меня такой вариант не устраивает - у меня может меняться "la-la-la"
в рамках модели MVC, попробуй разберись. Типа пытаемся загрузить контроллер начиная с конца, проходим по всему пути. PHP: <?php // take real URI list($_URI,$_QUERY) = explode("?", $_SERVER['REQUEST_URI']); // remove file extension and trailing backslash $_URI = preg_replace("/\.[\w]{3,}$/i","",trim($_URI," /")); $params = explode("/", $_URI); // make environment $ENV['URI'] = $params; $ENV['SCRIPT'] = null; $ENV['INPUT'] = array(); // find real requested file for ( $i=sizeof($params); $i > 0; $i-- ) { $path = implode(DSR,array_slice($params,0,$i)); /* TODO: make user routing */ // check real path if ( is_file(CTRL . $path . EXT) ) { $ENV['SCRIPT'] = $path; $ENV['INPUT'] = is_array($parce) ? array_reverse($parce) : null; break; } // check index file on given path elseif ( is_file(CTRL . $path . DSR . "index" . EXT) ) { $ENV['SCRIPT'] = $path . DSR . "index"; $ENV['INPUT'] = is_array($parce) ? array_reverse($parce) : null; break; } // assign as variable and try next else { $parce[] = $params[$i-1]; } } ?>
подожди... но вопрос был в том что в файле .htaccess я переделываю url из формы http://hostname/papka1/papka2/... в нужный мне формат http://hostname/test.php?id=papka1&someElseId=papka2...
Насколько я знаю я могу использовать данные из шаблона в RewriteRule в подастановке в виде $0 (|1|2|...|n) А в данном случае у меня получается так что - RewriteRule обратная_связь - берет данные не из шаблона а из строки подстановки... а ещё точнее берет данные физического расположения а не url'а. Вот это я никак и не пойму почему?
Закрываю тему, я нашел решение: в .htaccess RewriteEngine On RewriteRule ^index\.php.* - [L] #RewriteRule ^index2\.php.* - [L] ---- это если на отдельную страницу захотца RewriteRule ^([^/]*)/?([^/]*)/?([^/]*)/?.* index.php?menu_level0=$1&menu_level1=$2&menu_level2=$3 [L] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - в httpd.conf RewriteEngine On RewriteRule ^([^/]*)/?([^/]*)/?([^/]*)/?.* index.php?menu_level0=$1&menu_level1=$2&menu_level2=$3 [L] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Когда сервер обрабатывает .htaccess - он делает круг и опять заходит в него но уже с измененным урлом - для этого я поставил "RewriteRule ^index\.php.* - [L]" Если это прописывать на уровне конфигурационного файла - то он не возвращается обратно а сразу направляет по измененному адресу. Прошу прощения - если это не совсем php-ая тема была, но по-моему актуальна для web программирования.