- вот такие как раз и не хочу делать.... Покажите на примере как из этого меню вынимать нормальный урл из БД. все чпу записываются в "chpu"
А вы не записывайте их такими, не понятными. А сразу записывайте ЧеловекоПонятные. Способов можно придумать много. Но писать вам придется их в ручную (хотя все равно если развернуть можно сделать и автоматически, но это если все связать иначе никак). То есть с ?id=1&chpu=contacts в реврайте она допустим вида /contacts.html. Соответственно и в базу и в сылку нужно писать /contacts.html. Но ссылки будут доступны обе. ?id=1&chpu=contacts, /contacts.html. Если хотите сделать, чтобы ?id=1&chpu=contacts не была как бы доступна, придется писать обработчик, который будет за этим следить, когда наберут в адресе эту ссылку она станет вида /contacts.html. Уже была такая тема где об этом говорил, ищите.
Да, что вы вцепились в это меню? Если хотите автоматизировать это. Делайте как говорят. Перечитайте все еще разочек и все поймете.
Вы видимо думаете, что подменив в реврайте ?id=1&chpu=contacts на /contacts.html у вас после перехода ?id=1&chpu=contacts само что-ли должно меняться? Нет не поменяется оно само. Обе ссылки будут доступны... Иначе пишите свой обработчик.
В htaccess Options +FollowSymlinks RewriteEngine On RewriteRule ^(\d+)$ /index.php?id=$1 [F] Ссылка доступна по site.ru/1 и site.ru/index.php?id=1 Как второй вариант можно закрыть ??Или лучше поставить редирект 301 ?? Добавлено спустя 8 минут 6 секунд: Название страницы берется из строки chpu mysql - туда она попадает при создании страницы.
Теперь выводится ссылка такого вида index.php?id=1chpu=cena foreach($arr as $row){ if($row['parent']==$parent){ $sel=($row['id']==$id or $row['chpu']==$chpu)?' ':''; $level++; $out.=sprintf('%s<li%s><a href="index.php?id=%d&chpu=%s"%s><span class="l"></span><span class="r"></span><span class="t">%s</span></a>', str_repeat("\t",$level),$sel,$row['id'],$row['chpu'],$sel,$row['namemenu']); $inner=''; $level++; menu($arr,$inner,$row['id'],$level); ------------------------------------------------------------ В htaccess вот такое выражение Options +FollowSymlinks RewriteEngine On RewriteRule ^/([a-zA-Z0-9])$?.html /index.php?id=$1&chpu=$2 Выдается ошибка 500 Где ошибка???
Как оставить $2 параметр - а как убрать $1 параметр или пропустить... Я так понимаю нужно указать начало ^ - вопрос от чего указывать???
Регуляркой вытягиваю теперь chpu RewriteRule ([a-zA-Z0-9]*)\.html$ index.php?id=$1&chpu=$2 Вопрос, как формировать меню исходя из чпу??7 Добавлено спустя 7 минут 30 секунд: У меня формируется ссылка index.php?id=$1chpu=$2 - а нужно $2. Готова регулярка preg_match_all("/u=([^>])*/", $out, $matches); for ($i=0; $i< count($matches[0]); $i++) { echo $matches[0][$i];} Но не пойму как влезть с ней в переменную $out menu($structArr,$out,0);
У вас такая каша в голове, что всем лень по десятому разу объяснять. Обещайте, что на выходных отдохнёте, и не будете об этом думать.