За последние 24 часа нас посетили 30938 программистов и 1446 роботов. Сейчас ищут 875 программистов ...

.htaccess Красивая ссылка . Простой пример не получается

Тема в разделе "PHP для новичков", создана пользователем Dima4321, 25 янв 2011.

  1. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Добрался наконец до 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):
    1. RewriteEngine On #
    2.  
    3. RewriteRule ^(.+)$   /about.php?band=$1 [R]

    На выходе получается так , что index.php вообще не отображается.

    Прошу помощи !!))

    Пожалуйста.
     
  2. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    да кстати при запросе вот таком

    http://мойсайт/2/index.php

    делает редирект вот так.

    http://мойсайт/about.php?band=index.php
     
  3. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Прием !!

    ну дык что 2 строчки никто написать не может всем западло ??...))

    Помогите пожалуйста.
     
  4. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    что такое 2 ?
     
  5. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    RewriteEngine on

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteRule ^(.*)$ about.php?band=$1 [L,QSA]
     
  6. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    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'] производится ее отображение.
     
  7. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    ну, ссылки-то и не изменятся, пока ты их вручную не изменишь в коде.

    попробуй в браузере набрать http://site/2/ABBA
     
  8. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Да слушай так работает как ты показал.


    т.е. я должен изменить ссылку на такой вид

    <td><a href='$row[1]'>$row[1]</a></td>

    а скрипт about.php уже сам поймет, что я к нему обращаюсь ??
     
  9. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    да и кстати у меня несколько скриптов на 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]

    т.к правило буду снова использовать
     
  10. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Спасибо Gromo
    без тебя бы наверно долго еще мучился. Свою не сложную задачу я решил так.

    Код (Text):
    1. RewriteEngine on
    2.  
    3. RewriteCond %{REQUEST_FILENAME} !-f
    4. RewriteCond %{REQUEST_FILENAME} !-d
    5.  
    6. RewriteRule ^(.*)$ about.php?band=$1 [L,QSA]
    7. RewriteRule ^history/(.*)$ abouthistory.php?band=$1 [L,QSA]
    8. RewriteRule ^artikles/(.*)$ artikles.php?band=$1 [L,QSA]
    9. RewriteRule ^genre/(.*)$ aboutgenre.php?genre=$1 [L,QSA]
    в index.php

    Код (Text):
    1. <td><a href='$row[1]'>$row[1]</a></td>
    2.  
    3.  
    4.   <td><a href='genre/$row[2]'>$row[2]</a></td>
    5.  
    6.   <td>$row[4] $</td>
    7.  
    8.   <td><a href='history/$row[1]'>ABOUT $row[1]</a></td>
    9.  
    10.   <td><a href='artikles/$row[1]'>ARTIKLES $row[1]</a></td>
     
  11. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    artikle правильно писать artcle :)
     
  12. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Учтуtommyangelo ))


    Кстати в продолжении темы как вы считаете господа:
    если сделать ссылку не просто abba , а например abba.php или abba.html

    снизиться ли быстродействие и как сам поисковый бот к этому относится...?? из вашей практики господа??

    слышал, что-то (краем уха))) если на конце стоит .html, то что-то работает медленней.

    возможно не правильно истолковал
     
  13. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Dima4321
    ИМХО, с html на конце будет лучше. Правда нужно будет немного изменить регулярку, но это даже к лучшему.

    article :)
     
  14. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Gromo
    Когда искал чем бы выделить букву С - буква I потерялась ))))))
     
  15. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Код (Text):
    1. RewriteEngine on
    2.  
    3. RewriteCond %{REQUEST_FILENAME} !-f
    4. RewriteCond %{REQUEST_FILENAME} !-d
    5.  
    6. RewriteRule ^(.*)$ about.php?band=$1 [L,QSA]
    7. RewriteRule ^history/(.*)$ abouthistory.php?band=$1 [L,QSA]
    8. RewriteRule ^artikles/(.*)$ artikles.php?band=$1 [L,QSA]
    9. RewriteRule ^genre/(.*)$ aboutgenre.php?genre=$1 [L,QSA]
    Рано радовался.

    Оказывается корректно работает только
    RewriteRule ^(.*)$ about.php?band=$1 [L,QSA]

    Все остальное не получает переменную.


    что можно придумать ??
     
  16. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Т.е. история такова что первое правило глушит все остальные.
    стоит стереть первое правило и корректно работает второе.
    стоить стереть первое и второе корректно работает третье.
    стоит стереть первое второе третье --- корректно работает четвертое.

    В чем проблема как переиграть ??
     
  17. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    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]
     
  18. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Нет gromo так даже 1 страница (index.php) сразу становится некорректной.

    и дальше мне ничего не сделать.
     
  19. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Вот смотри как я придумал и что получается по факту


    Код (Text):
    1. RewriteEngine on
    2.  
    3. RewriteCond %{REQUEST_FILENAME} !-f
    4. RewriteCond %{REQUEST_FILENAME} !-d
    5.  
    6.  
    7. RewriteRule ^cd/(.*)$ about.php?band=$1 [L]  
    8. RewriteRule ^history/(.*)$ abouthistory.php?band=$1 [L]
    9. 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/
     
  20. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Dima4321
    я бы вообще предложил другой способ.
    сам пользуюсь универсальным, и разруливаю внутри с помощью роутера
     
  21. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    предложи ))

    и покажи приблизительный код..??))
     
  22. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    что-то типа

    RewriteRule ^(.*)/genre$ aboutgenre.php?band=$1 [L]
    RewriteRule ^(.*)/history$ abouthistory.php?band=$1 [L]

    но вообще можно воспользоваться роутером и уже внутри роутера разруливать что показывать.
     
  23. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0

    Это создает опять неправильные урлы как и выше из моего примера.

    Фактически просто поменяно местами позиции.

    Gromo где про это можно почитать ?? или кусок кода..что это из себя представляет..&&))
     
  24. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

    и внутри index.php разбирать запрос и вызывать необходимые функции
     
  25. Dima4321

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

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Хорошо на досуге подумаю о твоем варианте.

    Вот как вышел я из положения. Оказывается дело в абсолютных и относительных путях

    наверно я тупой напрочь пришлось съесть шоколадку и выпить кофе )) Вроде получилось


    Итого сайт имеем не в в основном каталоге а в паке 33.

    PHP:
    Код (Text):
    1. RewriteEngine on
    2.  
    3. RewriteCond %{REQUEST_FILENAME} !-f
    4. RewriteCond %{REQUEST_FILENAME} !-d
    5.  
    6.  
    7. RewriteRule ^cd/(.*)$ cd.php?band=$1 [L]  
    8. RewriteRule ^history/(.*)$ abouthistory.php?band=$1 [L]
    9. RewriteRule ^genre/(.*)$ aboutgenre.php?genre=$1 [L]
    10. в index.php
    PHP:
    index.php
    Код (Text):
    1. <td><a href='cd/$row[1]'> $row[1]</a></td>
    2.  
    3.   <td><a href='genre/$row[2]'>$row[2]</a></td>
    4.  
    5.   <td><a href='history/$row[1]'>About $row[1]</a></td>";
    а вот в других скриптах надо было взять уже не относительный путь

    aboutgenre.php

    PHP:
    Код (Text):
    1. <td><a href='/33/cd/$row[1]'>$row[1]</a></td>
    2.  
    3.  
    4.   <td><a href='/33/history/$row[1]'>ABOUT $row[1]</a></td>";
    abouthistory.php
    PHP:
    Код (Text):
    1. echo "<td><a href='/33/cd/$row[1]'>CD's $row[1]</a></td>";
    2.  
    3.   echo "<td><a href='/33/genre/$row[2]'>$row[2]</a></td>";
    и т.п. Надеюсь я правильно тебя понял tz-lom

    Жду ваших комментраиев ))