Горбунов Олег чтобы проще было запомнить google "ЧПУ web 2.0" з.ы. у меня вообще нет уверенности что это просто не перевод английского текста
в продолжение первого поста... реализовал сей чпу на практике: Код (Text): $prefix= dirname($_SERVER['SCRIPT_NAME']).'/'; $pathinfo= substr($_SERVER['REQUEST_URI'],strlen($prefix)); if (strpos($pathinfo,'index.php/')===0): $pathinfo= substr($pathinfo,10); $prefix.= 'index.php/'; endif; $parts= array_filter(explode('/',$pathinfo)); @list($handler,$uin)= explode(':',array_shift($parts)); $params= array(); if ($uin) $params[]= $uin; foreach ($parts as $n => $part): $pair= explode(':',$part); if (count($pair)==2): $params[$pair[0]]= $pair[1]; else: $params[]= $part; endif; endforeach; $request= array(); $request['prefix']= $prefix; $request['handler']= ifs (trim(strtr($handler,array('|'=>'/','..'=>'.')),'/'), 'catalog'); $request['params']= $params; $request['post']= $_GET+$_POST; на выходе скрипта получаются следнующие данные: $request['prefix'] - это префикс для ссылок. например, если движок установлен в /uritest/ относительно корня сайта, то сей првефикс будет '/uritest/' (если mod_rewrite не поддерживается, то '/uritest/index.php/'). этот превикс может использоваться для генерации ссылок относительно корня сайта. $request['handler'] - идентификатор скрипта, который должен обработать запрос $request['params'] - вытащенные из урла параметры (индексно-ассоциативный массив) $request['post'] - данные полученные из формы. включение поддержки модреврайта осуществляется добавлением всего одной строчки в .htaccess: Код (Text): RewriteRule .*/$ index.php соответственно, если модреврайт включён, то ссылки должны быть вида: http://dark-demon.jino-net.ru/uritest/topic:about_uuu/ , а если выключен, то: http://dark-demon.jino-net.ru/uritest/i ... about_uuu/ вот и вся разница. впрочем, второй вариант работает даже при включённом реврайте... при формировании ссылок - просто используйте $request['prefix'], в который будет содержать в данном случае либо: /uritest/ ,либо: /uritest/index.php/ соответственно пример по сложнее: http://dark-demon.jino-net.ru/uritest/p ... rial:soft/ здесь "products" - идентификатор обработчика, и далее пары ключ-значение, из которых будет составлен массив $request['params'] ключи можно опустить (не рекомендуется, но иногда это необходимо): http://dark-demon.jino-net.ru/uritest/c ... t/win/net/ ключами в массиве соответственно будут номера соответствующих значений. замечу, что catalog - это обработчик по умолчанию, соответственно вместо последней сылки лучше использовать один из следующих вариантов: http://dark-demon.jino-net.ru/uritest/:/soft/win/net/ http://dark-demon.jino-net.ru/uritest/|/soft/win/net/ (upd: опа, последний вариант лучше не использовать связи с глюками в пхпбб ) также поддерживается такой синтаксис: http://dark-demon.jino-net.ru/uritest/t ... about_all/ , который равносилен такому: http://dark-demon.jino-net.ru/uritest/t ... about_all/ , но второй вариант не рекомендуется, потому как пользователь может стереть "flame_about_all/" надеясь попасть на уровень выше, но получит ошибку, что "идентификатор не найден" или что-нибудь в этом духе. первый же вариант представляет из себя цельную пару. ну в общем, спрашивайте, если что не понятно, а то мне сложно это рассказывать чуть позже сделаю функцию для обратного преобразоания.. .мож даже класс замучу...
а, сорри. Код (Text): function ifs( ) { foreach( func_get_args() as $arg ) if( $ret= $arg ) break; return $ret; }