Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Modrewrite или настоящие ЧПУ

5.5K
04 декабря 2007 года
Boom.Olezka
69 / / 12.09.2006
Несколько вопросов по ModRewrite у Apache

урл на сайте составляются про принципу

http://site.com/index.php?id_language=1&id_page=3 - страничка например на ней список машины разных марок грузится из базы, в базе записано что id_page=3 будет грузить шаблон для вывода списка авто и категория авто category=10. id_page=3 определяет тип страницы и конретно что выбирать из этого типа, напрмер какую категорию авто

но у меня ещё сделано что о каждом авто я могу получить продобную информацию по ссылке вида http://site.com/index.php?id_language=1&id_page=3&show=descr_car&id_car=23

вот какое правило можно описать для последнего урл

RewriteRule ^([0-1])/([0-9])/([A-Za-z])])/([0-9])$ index.php?id_language=$1&id_page=$2&show=$3&id_car=$4

id_page - дерево... каждый id_page знает своего родителя, как реализовать стуктуру урл например http://site.com/rus/red/small/cool/zaz где rus - id_language - 1, а путь red/small/cool/ это ветка до cool - id_page=3, zaz - id_car=23 :) я конечно могу сократить и упростить... небудет пути до выбранного id_page, http://site.com/rus/cool/zaz/ но хочется именно чтобы посетитель видел где он находится по каталогам и стирая их в урл... выходил на родительску страницу

Глобальный вопрос :) вложеность конечно же неограниченая и как определить что zaz это вызов шаблона с описанием машины заз, а не раздел сайта... или надо обязательно после cool ставить мою переменую show=descr_car - http://site.com/rus/red/small/cool/show_car/zaz

а урл всё равно получается http://site.com/index.php?id_language=1&id_page=3&show=descr_car&id_car=23

Ещё один вопросик, если я хочу сделать имена этих псевдо папок человеческими занчет на кажду запись в таблице мне надо будет писать индекс по которому я буду выбирать запись из таблицы? Например таблица машин id_car=2 car_name="ЗАЗ машина" url_index="zaz" я выбираю уже не по WHERE id_car=2, а по url_index='zaz'? Правельно я понимаю, тоесть для каждой записи я должен определять index - человекопонятный и уникальный :) впрос делать эту в ручну или автоматом при записи в базу не стоит

Жду любых советов и отзывов :) Спасибо
7.9K
04 декабря 2007 года
vasa_c
191 / / 05.04.2007
Переадресуйте все запросы страниц на один обработчик (index.php), а в нём уже спокойно разбирайте URI как вам хочется.
5.5K
04 декабря 2007 года
Boom.Olezka
69 / / 12.09.2006
Да спасибо, именно так я и сделал :) А существует ли разница описывать правила в .htaccess или как нашем варианте разбирать уже строчку запроса на index.php

Получается что для каждой записи в таблице БД мне надо создать человеко-понятный индекс? и выбирать я буду уже например по ... WHERE cars.url_key='bmw' , а не WHERE cars.id_car=3 именно так это и реализуется? Просто нехочется изобретать велосипед, чтобы потом не стало это боком...
27K
04 декабря 2007 года
taj
39 / / 11.11.2007
Цитата: Boom.Olezka
Да спасибо, именно так я и сделал :) А существует ли разница описывать правила в .htaccess или как нашем варианте разбирать уже строчку запроса на index.php


Ну мне кажеться что всё-таки лучше описывать правила в .htaccess, так как пропадает необходимость дёргать регулярные выражения средствами php - это сделает апач

Цитата: Boom.Olezka
Получается что для каждой записи в таблице БД мне надо создать человеко-понятный индекс? и выбирать я буду уже например по ... WHERE cars.url_key='bmw' , а не WHERE cars.id_car=3 именно так это и реализуется? Просто нехочется изобретать велосипед, чтобы потом не стало это боком...

Можно и так, но не совсем безопасно (подпихнуть в урл всё что угодно можно будет). Как вариант можно брать какой-нибудь хеш от урла, но тогда возникает проблема уникальности урлов.
З.Ы. Смотри как в других cms реализовано.

5.5K
05 декабря 2007 года
Boom.Olezka
69 / / 12.09.2006
taj, пока и в дальнейшем я не вижу необходимости прибегать к регулярным выражениям... возможно это специфика моего движка.

Я как говорится не спец - немного отмазываюсь... проблему подпихивания урл краем уха понимаю... получается что человек сможет просто вмешаться в мой sql запрос... но разве варианта if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/", $var)) $var = ""; не хватит? кроме сплошного текста без спец символов человек не сможет подствить... я наверное не знаю всех тонкостей... Врятли мне придётся проверять сотни переменных... :eek:
7.9K
05 декабря 2007 года
vasa_c
191 / / 05.04.2007
Цитата:
Ну мне кажеться что всё-таки лучше описывать правила в .htaccess, так как пропадает необходимость дёргать регулярные выражения средствами php - это сделает апач


Единственный обработчик позволяет делать гораздо более гибкую обработку, чем простой подбор регулярок.
Так же он позволяет централизованно выполнять базовые действия — инициализацию, подключение нужных файлов, авторизацию, проверку привилегий, обертывание в шаблон и т.п. Конкретному экшену останется только заниматься своими непосредственными делами не делая каждый раз общую рутину.
Хотя в каждом конкретном случае нужно выбирать то что лучше для него :)

27K
05 декабря 2007 года
taj
39 / / 11.11.2007
Цитата: vasa_c
Единственный обработчик позволяет делать гораздо более гибкую обработку, чем простой подбор регулярок.
Так же он позволяет централизованно выполнять базовые действия — инициализацию, подключение нужных файлов, авторизацию, проверку привилегий, обертывание в шаблон и т.п. Конкретному экшену останется только заниматься своими непосредственными делами не делая каждый раз общую рутину.
Хотя в каждом конкретном случае нужно выбирать то что лучше для него :)



что-то Zend Framework'ом в твоих словах отдаёт :) Ведь там реализовано точно так как говоришь.;)

Цитата: Boom.Olezka
Я как говорится не спец - немного отмазываюсь... проблему подпихивания урл краем уха понимаю... получается что человек сможет просто вмешаться в мой sql запрос... но разве варианта if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/", $var)) $var = ""; не хватит? кроме сплошного текста без спец символов человек не сможет подствить... я наверное не знаю всех тонкостей... Врятли мне придётся проверять сотни переменных...

погугли с фразами 'sql иньекция', 'XSS атака' - найдёшь что почитать

5.5K
05 декабря 2007 года
Boom.Olezka
69 / / 12.09.2006
Спасибо вам :)

Выше мне советовали посмотреть примеры уже готовых решений... Подскажите где можно посмотреть код cms в которой реализованы чпу, только не такие чпу /category64/car45/ а именно человеческие имена /redcars/bmw/ ну или там заголовок новости пишется типа news/novostj_o_viborah.html типа того :)
27K
05 декабря 2007 года
taj
39 / / 11.11.2007
wordpress только там код довольно замороченный ;)
5.5K
06 декабря 2007 года
Boom.Olezka
69 / / 12.09.2006
Вот вот... я уже смотрел (wordpress), правда так получилось что не особо долго :) и не всё сразу понял... стоит покапаться :) в каких ещё средне-популярных системах используются такие человеко-понятные URL :confused:
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог