Написал 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/ И вообще стоит это делать или нет?
как я понял из твоего описания - лучшим выходом для тебя будет первое значение после домен /news/ к примеру использовать для выбора модуля, а остальное парсить уже в каждом модуле отдельно в зависимости от его архитектуры.. ну помучиться конечно немного придётся
QQQ Тут ещё огромный минус в том что порой парядок аргументов нарушается и тогда парсинг тоже затруднителен
GvOzD 1) вроде как красиво и запоминаются ссылки... /news/ набирается проще, чем mod_id=31 2) вроде как проще псевдостатику делать, что вроде как благоприятно сказывается на индексации 3) тупо модно
использование ЧПУ — абсолютно субъективная вещь последнее время третий пункт наиболее распространён http://php.ru/forum/viewtopic.php?t=6604
На хабрахабре столкнулся с массой критики в сторону систем не формирующих ЧПУ.Неужели кто-то помнит линки на память и на тИЦ это никак не влияет. Зато здорово влияет на производительность к примеру , у меня в таблице 10000 новостей.Таблица имеет вид: id name chpu text 1 Россия Rossiya .... 2 Украина Ukraina .... 3 Белорусия Belorusiya .... Запрос на выборку новости по ID гораздо быстрее отрабатывает, чем запрос на выбор новости с chpu='Ukraina' , тем более что поле ID можно нормально проиндексировать. И везде куда не плюнь с ЧПУ падает производительность и появляется куча гемороя. UMI.CMS поддалась двум веяниям моды - это ЧПУ и XSLT и теперь пока грузятся их сайты можно сходить покурить и выпить кофе.
GvOzD Я лично запоминаю многие адреса, если это ЧПУ. И именно первый пункт сейчас считаю наиболее актуальным. Разрабатываемое приложение должно в первую очередь ориентироваться на пользователя. Я лично не люблю длинные URL во все 256 знаков длинной и какими-то непонятными "кракозябрами". Мне запомнить "нормальный" адрес проще, чем создать закладку в браузере. Тем более что тогда я смогу зайти по этому адресу с любого компа и любого браузера.
Лично я использую ЧПУ, но не использую текстовые ID. Т.е. url у меня такой http://example.com/news/1024.html
Изначально из-за того, что когда я пришёл работать в то место, там уже так было. А потом понравилось, т.к. у нас параметры урла помещались в константы, в порядке следования в урле и они всегда доступны вне зависимости от того, был передан параметр или небыл (т.е. в константе была пустота, если параметра нет). PAGE ACTION ARG1 ARG2 ARG3 ARG4 ARG5 ARG6 ARG7 В результате получилась довольно хорошая система: Что Загрузить / Что сделать / Прочие параметры типа ID и.т.д. Ну само собой там были вариации, когда было что-то типа модуль / действие / поддействие / параметры. Система была такова, что в конструкторе каждого модуля определялось поведение в зависимости от набора параметров урла. Незнаю как вам, а мне понравилось. Если хотите поковырять систему, я основу давал Nemo (помоему), спросите у него в ЛС.
Я так делал. Диспетчер принимает URL, дальше роутер прогоняет его по правилам роутинга (обычные регэкспы). Если нашёл нужное правило, то обрабатывается именно по этому правилу. После обработки получаются те же параметры, что и по умолчанию, без роутинга. Если правило не найдено, то используется стандартный формат. Код (Text): /controller/action/param1,value1/paramN,valueN/ А достаются эти параметры при помощи метода Request класса. PHP: $value = $this->request->param('param_name', 'default_value'); В принципе, удобно.
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.
А как можно без помощь mod_rewrite'а перенаправить url site.ru/news/rossiya/ на site.ru/index.php?module=news&categories=rossiya ????
QQQ В .htaccess я пропишу строку вида ErrorDocument 404 http://site.ru/index.php А урл то я как передам???
$_SERVER['REQUEST_URI']; пост - на обычный url лог - всё так но когда-то когда mod_rewrite стоял далеко не у всех хостеров - этот способ был очень популярен
А нафига козе боян? Код (Text): # Да да, я с lighttpd работаю rewrite.once ('(.*)' => 'index.php') И просто делаю парсинг REQUEST_URI, в которой содержится урл, который запрашивали. Ну и ставлю исключение, что есть jpg|jpeg|png|js|........ то rewrite как есть, т.е. Код (Text): rewrite.once ((.jpg|.jpeg|....)$' => '$1') Работает на ура. И никаких проблем с POST, работает как есть в 2 строки и всё обрабатывает index.php
да это все круто.... кстате ЧПУ это ЧистоПодменаСсылок или как? лично на моем опыте есть мнение, многие пользователи вообще не обращают внимания на урлы, я тоже несильно на них смотрю и сам, хотя случается,... но все же. Пользователь кликает ссылку и получает результат, ну посмотрит он в это время на урл пока страница грузиться, ну увидит там черт знает что - ну и что с этого, ему важно что загрузиться по этой ссылке а не этот урл - он может вообще на это не обращает внимание а смотрит на процент загрузки страницы... это мы тут крутые вкладываем в урлы особый смысл, а пользователь который понятия не имеет что есть ТЭГ или СКРИПТ вообще не обращает внимания на эти урлы... лишь только при написании домена куда он хочет зайти - я думаю ему проще запомнить название домена + визуальное место на главной старанице со ссылкой на нужную инфу чем любые урлы после имени домена (даже с чпу)... да во многих книгах, даже тот же Шлоснейгл говорит, что типа сессии нафих ибо модификация строки запроса выглядит уродливо - ну и что теперь полюбому включать печенье? из-за этого.... хотя после всего сказанного я уже не как пользователь а как больше чем пользователь привлекательнее смотрю на ЧПУ :wink:
Ну тут как раз вопрос спорный. Чтобы заметить и запомнить УРЛ много ума не надо. И именно этим обмениваются люди устно "Зайди на май-мейл-ру-инбокс-декодер" (например) и как бы человек, который хоть немного времени провел в инете пойдет на my.mail.ru/inbox/decoder. У нас в мозгу тоже своеобразные ЧПУ А ЧПУ, по-моему, как хотят расшифровывают: человеко понятный урл, черезвычайно простой урл... вот и чисто подмена ссылок вам )