За последние 24 часа нас посетил 61391 программист и 1740 роботов. Сейчас ищут 2183 программиста ...

человеко понятные урлы

Тема в разделе "Прочие вопросы по PHP", создана пользователем GvOzD, 10 сен 2008.

  1. GvOzD

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

    С нами с:
    16 фев 2007
    Сообщения:
    103
    Симпатии:
    0
    Написал CMS систему , но на этапе её проектирования не продумал человеко понятные урлы. Все ссылки сейчас выглядят следующим образом:
    http://xxx.ru/index.php?module=news&partition=3
    http://xxx.ru/index.php?module=news&cat ... artition=3
    http://xxx.ru/index.php?limit=20&module ... artition=3
    Как сейчас можно по хитрому сделать человеко понятные урлы , без глобальных изменений в системе и без помощи mod_rewrite. В принципе у каждой страницы в базе есть латинское название, novosti_rossii к примеру. И без особых жертв все урлы я могу привести к виду
    http://xxx.ru/index.php?module=news&cat ... on=novosti
    но как быть дальше , как добиться красивых урлов типа
    http://xxx.ru/news/novosti/novosti_rossii/
    И вообще стоит это делать или нет?
     
  2. QQQ

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

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    как я понял из твоего описания - лучшим выходом для тебя будет первое значение после домен /news/ к примеру использовать для выбора модуля, а остальное парсить уже в каждом модуле отдельно в зависимости от его архитектуры.. ну помучиться конечно немного придётся :)
     
  3. GvOzD

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

    С нами с:
    16 фев 2007
    Сообщения:
    103
    Симпатии:
    0
    QQQ
    Тут ещё огромный минус в том что порой парядок аргументов нарушается и тогда парсинг тоже затруднителен
     
  4. QQQ

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

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    ну если модулей много - то придётся кучу кода перелопачивать значит
     
  5. GvOzD

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

    С нами с:
    16 фев 2007
    Сообщения:
    103
    Симпатии:
    0
    А вообще в чем плюс человеко понятных урлов , все просто как будто помешались на них?
     
  6. QQQ

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

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    GvOzD
    1) вроде как красиво и запоминаются ссылки... /news/ набирается проще, чем mod_id=31
    2) вроде как проще псевдостатику делать, что вроде как благоприятно сказывается на индексации
    3) тупо модно :)
     
  7. admyx

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

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    слышал только о втором варианте))
     
  8. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    использование ЧПУ — абсолютно субъективная вещь :)
    последнее время третий пункт наиболее распространён

    http://php.ru/forum/viewtopic.php?t=6604
     
  9. GvOzD

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

    С нами с:
    16 фев 2007
    Сообщения:
    103
    Симпатии:
    0
    На хабрахабре столкнулся с массой критики в сторону систем не формирующих ЧПУ.Неужели кто-то помнит линки на память и на тИЦ это никак не влияет. Зато здорово влияет на производительность к примеру , у меня в таблице 10000 новостей.Таблица имеет вид:
    id name chpu text
    1 Россия Rossiya ....
    2 Украина Ukraina ....
    3 Белорусия Belorusiya ....
    Запрос на выборку новости по ID гораздо быстрее отрабатывает, чем запрос на выбор новости с chpu='Ukraina' , тем более что поле ID можно нормально проиндексировать. И везде куда не плюнь с ЧПУ падает производительность и появляется куча гемороя. UMI.CMS поддалась двум веяниям моды - это ЧПУ и XSLT и теперь пока грузятся их сайты можно сходить покурить и выпить кофе.
     
  10. decoder

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

    С нами с:
    11 фев 2006
    Сообщения:
    469
    Симпатии:
    0
    GvOzD
    Я лично запоминаю многие адреса, если это ЧПУ. И именно первый пункт сейчас считаю наиболее актуальным. Разрабатываемое приложение должно в первую очередь ориентироваться на пользователя. Я лично не люблю длинные URL во все 256 знаков длинной и какими-то непонятными "кракозябрами".
    Мне запомнить "нормальный" адрес проще, чем создать закладку в браузере. Тем более что тогда я смогу зайти по этому адресу с любого компа и любого браузера.
     
  11. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Лично я использую ЧПУ, но не использую текстовые ID. Т.е. url у меня такой

    http://example.com/news/1024.html
     
  12. admyx

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

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    А какой смысл тогда в чпу?
    Если он особо не запоминается?
     
  13. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  14. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Изначально из-за того, что когда я пришёл работать в то место, там уже так было. А потом понравилось, т.к. у нас параметры урла помещались в константы, в порядке следования в урле и они всегда доступны вне зависимости от того, был передан параметр или небыл (т.е. в константе была пустота, если параметра нет).
    PAGE
    ACTION
    ARG1
    ARG2
    ARG3
    ARG4
    ARG5
    ARG6
    ARG7

    В результате получилась довольно хорошая система:
    Что Загрузить / Что сделать / Прочие параметры типа ID и.т.д.

    Ну само собой там были вариации, когда было что-то типа модуль / действие / поддействие / параметры. Система была такова, что в конструкторе каждого модуля определялось поведение в зависимости от набора параметров урла. Незнаю как вам, а мне понравилось. Если хотите поковырять систему, я основу давал Nemo (помоему), спросите у него в ЛС.
     
  15. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Я так делал. Диспетчер принимает URL, дальше роутер прогоняет его по правилам роутинга (обычные регэкспы). Если нашёл нужное правило, то обрабатывается именно по этому правилу. После обработки получаются те же параметры, что и по умолчанию, без роутинга. Если правило не найдено, то используется стандартный формат.
    Код (Text):
    1. /controller/action/param1,value1/paramN,valueN/
    А достаются эти параметры при помощи метода Request класса.
    PHP:
    1. $value = $this->request->param('param_name', 'default_value');
    В принципе, удобно.
     
  16. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Psih
    +1.

    admyx
    ЧПУ, это когда site.ru/articles/news/0 вместо site.ru?index.php?type=articles&type_sec=news&id=0
    Смысл в том, что они понятны человеку и более удобны, да и ссылка занимает меньше места выглядит лучше.

    А
    site.ru/articles/news/0
    и
    site.ru/articles/news/segodnya_ejednevniy_den_sisek

    Для человека идентичны. Он не сможет запомнить название статьи на транслите, чтобы её воспроизвести. Подобные тяжелочитаемые надписи только портят вид URL.

    Да и не на всех сайтах подойдут такие вещи - бывают новости с одинаковыми именами, поэтому, если воплощать такое, то только при существовании даты в URL.
     
  17. GvOzD

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

    С нами с:
    16 фев 2007
    Сообщения:
    103
    Симпатии:
    0
    А как можно без помощь mod_rewrite'а перенаправить url
    site.ru/news/rossiya/
    на
    site.ru/index.php?module=news&categories=rossiya
    ????
     
  18. QQQ

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

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    GvOzD
    слать 404 ошибку на php скрипт который распарсит и вызовет что нужно ))
     
  19. GvOzD

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

    С нами с:
    16 фев 2007
    Сообщения:
    103
    Симпатии:
    0
    QQQ
    В .htaccess я пропишу строку вида
    ErrorDocument 404 http://site.ru/index.php
    А урл то я как передам???
     
  20. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    QQQ
    засоришь лог, плюс про пост данные не забывай
     
  21. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
  22. QQQ

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

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    $_SERVER['REQUEST_URI'];

    пост - на обычный url
    лог - всё так :) но когда-то когда mod_rewrite стоял далеко не у всех хостеров - этот способ был очень популярен
     
  23. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    А нафига козе боян?
    Код (Text):
    1.  
    2. # Да да, я с lighttpd работаю
    3. rewrite.once ('(.*)' => 'index.php')
    И просто делаю парсинг REQUEST_URI, в которой содержится урл, который запрашивали. Ну и ставлю исключение, что есть jpg|jpeg|png|js|........ то rewrite как есть, т.е.
    Код (Text):
    1.  
    2. rewrite.once ((.jpg|.jpeg|....)$' => '$1')
    Работает на ура. И никаких проблем с POST, работает как есть в 2 строки и всё обрабатывает index.php
     
  24. kostyl

    kostyl Guest

    да это все круто.... кстате ЧПУ это ЧистоПодменаСсылок или как?
    лично на моем опыте есть мнение, многие пользователи вообще не обращают внимания на урлы, я тоже несильно на них смотрю и сам, хотя случается,... но все же. Пользователь кликает ссылку и получает результат, ну посмотрит он в это время на урл пока страница грузиться, ну увидит там черт знает что - ну и что с этого, ему важно что загрузиться по этой ссылке а не этот урл - он может вообще на это не обращает внимание а смотрит на процент загрузки страницы... это мы тут крутые вкладываем в урлы особый смысл, а пользователь который понятия не имеет что есть ТЭГ или СКРИПТ вообще не обращает внимания на эти урлы... лишь только при написании домена куда он хочет зайти - я думаю ему проще запомнить название домена + визуальное место на главной старанице со ссылкой на нужную инфу чем любые урлы после имени домена (даже с чпу)... да во многих книгах, даже тот же Шлоснейгл говорит, что типа сессии нафих ибо модификация строки запроса выглядит уродливо - ну и что теперь полюбому включать печенье? из-за этого.... хотя после всего сказанного я уже не как пользователь а как больше чем пользователь привлекательнее смотрю на ЧПУ :wink:
     
  25. decoder

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

    С нами с:
    11 фев 2006
    Сообщения:
    469
    Симпатии:
    0
    Ну тут как раз вопрос спорный. Чтобы заметить и запомнить УРЛ много ума не надо. И именно этим обмениваются люди устно "Зайди на май-мейл-ру-инбокс-декодер" (например) и как бы человек, который хоть немного времени провел в инете пойдет на my.mail.ru/inbox/decoder. У нас в мозгу тоже своеобразные ЧПУ :)

    А ЧПУ, по-моему, как хотят расшифровывают: человеко понятный урл, черезвычайно простой урл... вот и чисто подмена ссылок вам )