Добрался наконец до mod rewrite Оказалось не все так просто. Значим имею: http://www.мой сайт/2/index.php index представляет собой кучу ссылок такого типа http://www.мой сайт/2/about.php?band=ABBA http://www.мой сайт/2/about.php?band=C%20C%20CATCH http://www.мой сайт/2/about.php?band=BRAVO Т.е. они формируются посредством моего скрипта index.php , который выбирает из Б.Д. инфу и выводит на страничку, на которую ведет ссылка. Хочу иметь урл такого вида http://www.мой сайт/2/ABBA вот мой .htaccess Вкладываю его в папку 2 где лежит index.php и все другие скрипты завязанные. Код (Text): RewriteEngine On # RewriteRule ^(.+)$ /about.php?band=$1 [R] На выходе получается так , что index.php вообще не отображается. Прошу помощи !!)) Пожалуйста.
да кстати при запросе вот таком http://мойсайт/2/index.php делает редирект вот так. http://мойсайт/about.php?band=index.php
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ about.php?band=$1 [L,QSA]
2 это подкаталог в основном каталоге. http://мойсайт/2/index.php т.е. все скрипты помещены в папку 2. Вставил твой код но ничего не изменилось. Т.е сайт сам работает корректно и index.php отображает, но ссылки не меняются. и имекб прежний вид Маленький комментарий может это важно: строение и архитектура сайта. скрипт index.php имеет такую строчку <td><a href='about.php?band=$row[1]'>$row[1]</a></td> т.е это кликабельная ссылка на скрипт about.php там в скрипте about.php $page = $_GET['band']; и в зависимости от того какая группа пришла в массив $_GET['band'] производится ее отображение.
ну, ссылки-то и не изменятся, пока ты их вручную не изменишь в коде. попробуй в браузере набрать http://site/2/ABBA
Да слушай так работает как ты показал. т.е. я должен изменить ссылку на такой вид <td><a href='$row[1]'>$row[1]</a></td> а скрипт about.php уже сам поймет, что я к нему обращаюсь ??
да и кстати у меня несколько скриптов на index.php запускается с таким же принципом <td><a href='edit.php?band=$row[1]'>Редактировать</a></td> <td><a href='delete.php?band=$row[1]'>Удалить пункт</a></td> <td><a href='show.php?band=$row[1]'>Отобразить пункт</a></td>"; т.е. получается надо оставлять слово edit delete show и на каждый случай писать регулярку ?? тогда вот эти флажки надо будет менять [L,QSA] т.к правило буду снова использовать
Спасибо Gromo без тебя бы наверно долго еще мучился. Свою не сложную задачу я решил так. Код (Text): RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ about.php?band=$1 [L,QSA] RewriteRule ^history/(.*)$ abouthistory.php?band=$1 [L,QSA] RewriteRule ^artikles/(.*)$ artikles.php?band=$1 [L,QSA] RewriteRule ^genre/(.*)$ aboutgenre.php?genre=$1 [L,QSA] в index.php Код (Text): <td><a href='$row[1]'>$row[1]</a></td> <td><a href='genre/$row[2]'>$row[2]</a></td> <td>$row[4] $</td> <td><a href='history/$row[1]'>ABOUT $row[1]</a></td> <td><a href='artikles/$row[1]'>ARTIKLES $row[1]</a></td>
Учтуtommyangelo )) Кстати в продолжении темы как вы считаете господа: если сделать ссылку не просто abba , а например abba.php или abba.html снизиться ли быстродействие и как сам поисковый бот к этому относится...?? из вашей практики господа?? слышал, что-то (краем уха))) если на конце стоит .html, то что-то работает медленней. возможно не правильно истолковал
Dima4321 ИМХО, с html на конце будет лучше. Правда нужно будет немного изменить регулярку, но это даже к лучшему. article
Код (Text): RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ about.php?band=$1 [L,QSA] RewriteRule ^history/(.*)$ abouthistory.php?band=$1 [L,QSA] RewriteRule ^artikles/(.*)$ artikles.php?band=$1 [L,QSA] RewriteRule ^genre/(.*)$ aboutgenre.php?genre=$1 [L,QSA] Рано радовался. Оказывается корректно работает только RewriteRule ^(.*)$ about.php?band=$1 [L,QSA] Все остальное не получает переменную. что можно придумать ??
Т.е. история такова что первое правило глушит все остальные. стоит стереть первое правило и корректно работает второе. стоить стереть первое и второе корректно работает третье. стоит стереть первое второе третье --- корректно работает четвертое. В чем проблема как переиграть ??
Dima4321 гы-гы-гы RewriteRule ^history/(.*)$ history.php?band=$1 [L,QSA] RewriteRule ^artiсles/(.*)$ artiсles.php?band=$1 [L,QSA] RewriteRule ^genre/(.*)$ genre.php?genre=$1 [L,QSA] RewriteRule ^(.*)$ about.php?band=$1 [L,QSA]
Нет gromo так даже 1 страница (index.php) сразу становится некорректной. и дальше мне ничего не сделать.
Вот смотри как я придумал и что получается по факту Код (Text): RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^cd/(.*)$ about.php?band=$1 [L] RewriteRule ^history/(.*)$ abouthistory.php?band=$1 [L] RewriteRule ^genre/(.*)$ aboutgenre.php?genre=$1 [L] В итоге с главной страницы я могу корректно перейти по всем трем ссылкам такого вида.Т.е. скрипт передает другим скриптам все четко. <td><a href='cd/$row[1]'>$row[1]</a></td> <td><a href='genre/$row[2]'>$row[2]</a></td> <td><a href='history/$row[1]'>About $row[1]</a></td>"; Но далее на тех же скриптам у меня стоит перелинковка между всем тремя скриптами. и в итоге в адресной строке я могу получить вот это уходя с этого урла 2/cd/BRAVO на этот 2/history/BRAVO в итоге попадаю на 2/cd/history/BRAVO или при выборе жанра я стою на корректной слыыке 2/history/abba и должен бы перейти на 2/genre/POP в итоге имею 2/cd/genre/POP почему так. Надо для тех скриптов тоже придумывать обработчик или что..?? вообще можно получать некорректные чумовые улры типа такого /cd/genre/history/history/
Dima4321 я бы вообще предложил другой способ. сам пользуюсь универсальным, и разруливаю внутри с помощью роутера
что-то типа RewriteRule ^(.*)/genre$ aboutgenre.php?band=$1 [L] RewriteRule ^(.*)/history$ abouthistory.php?band=$1 [L] но вообще можно воспользоваться роутером и уже внутри роутера разруливать что показывать.
Это создает опять неправильные урлы как и выше из моего примера. Фактически просто поменяно местами позиции. Gromo где про это можно почитать ?? или кусок кода..что это из себя представляет..&&))
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?route=$1 [L,QSA] и внутри index.php разбирать запрос и вызывать необходимые функции
Хорошо на досуге подумаю о твоем варианте. Вот как вышел я из положения. Оказывается дело в абсолютных и относительных путях наверно я тупой напрочь пришлось съесть шоколадку и выпить кофе )) Вроде получилось Итого сайт имеем не в в основном каталоге а в паке 33. PHP: Код (Text): RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^cd/(.*)$ cd.php?band=$1 [L] RewriteRule ^history/(.*)$ abouthistory.php?band=$1 [L] RewriteRule ^genre/(.*)$ aboutgenre.php?genre=$1 [L] в index.php PHP: index.php Код (Text): <td><a href='cd/$row[1]'> $row[1]</a></td> <td><a href='genre/$row[2]'>$row[2]</a></td> <td><a href='history/$row[1]'>About $row[1]</a></td>"; а вот в других скриптах надо было взять уже не относительный путь aboutgenre.php PHP: Код (Text): <td><a href='/33/cd/$row[1]'>$row[1]</a></td> <td><a href='/33/history/$row[1]'>ABOUT $row[1]</a></td>"; abouthistory.php PHP: Код (Text): echo "<td><a href='/33/cd/$row[1]'>CD's $row[1]</a></td>"; echo "<td><a href='/33/genre/$row[2]'>$row[2]</a></td>"; и т.п. Надеюсь я правильно тебя понял tz-lom Жду ваших комментраиев ))