Вообще, такое реализуемо на mod_rewrite?

12 3
psylosss
На сайте с 23.12.2005
Offline
126
1436

Возможно ли в принципе реализовать на mod_rewrite такую замену:

RewriteRule ^article_(a|b|c)\.html$ /index.php?article_id=(1|2|3)

Конечно, это решается топорным методом

RewriteRule ^article_a\.html$ /index.php?article_id=1

RewriteRule ^article_b\.html$ /index.php?article_id=2

RewriteRule ^article_c\.html$ /index.php?article_id=3

Но хочется свести все именно в одну строку. Господа матерые программисты, помогите пожалуйста :)

Веб-разработка. Сложные проекты. Проектирование. Проект-менеджмент. Стартапы.
Shtogrin
На сайте с 02.11.2006
Offline
95
#1

RewriteRule ^article_(a|b|c)\.html$ /index.php?article_id=$1

www.shtogrin.com (http://www.shtogrin.com/). Канцтовары (http://www.invit.com.ua/). 1С Бухгалтерия (http://account.kiev.ua/).
psylosss
На сайте с 23.12.2005
Offline
126
#2

Shtogrin, нет, это не то.

$1 - это то, что будет взято из левой части выражения, в скобках. То есть

/article_a.html будет заменено на /index.php?article_id=a

а надо, чтобы была замена

/article_a.html ---> /index.php?article_id=1

antono
На сайте с 12.07.2004
Offline
286
#3

Это уже скриптом реализуйте. Сделайте массив

$param["a"]=1;

$param["b"]=2;

и т. д.

[Удален]
#4
RewriteRule ^article_(a|b|c)\.html$ /index.php?article_id=(1|2|3)

Конечно, это решается топорным методом

RewriteRule ^article_a\.html$ /index.php?article_id=1
RewriteRule ^article_b\.html$ /index.php?article_id=2
RewriteRule ^article_c\.html$ /index.php?article_id=3

я бы сказал что оба метода достаточно топорные :-D

а вот про массив человек правильно говорит

RewriteRule ^article_(a|b|c)\.html$ /index.php?article_id=$1

$articles[1] = "a";

$articles[2] = "b";

$articles[3] = "c";

$article_id = array_search($_GET['article_id'],$articles);

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

Алексей Барыкин
На сайте с 04.02.2008
Offline
272
#5
psylosss:
Возможно ли в принципе реализовать на mod_rewrite такую замену:

RewriteRule ^article_(a|b|c)\.html$ /index.php?article_id=(1|2|3)

Конечно, это решается топорным методом

RewriteRule ^article_a\.html$ /index.php?article_id=1
RewriteRule ^article_b\.html$ /index.php?article_id=2
RewriteRule ^article_c\.html$ /index.php?article_id=3

Но хочется свести все именно в одну строку. Господа матерые программисты, помогите пожалуйста :)

Так не получится.

А можно услышать изначальную задачу? Может к ней с боку подойти можно...

S
На сайте с 09.10.2007
Offline
186
#6

вообще идеальный вариант - это ЛЮБОЙ урл скармливать скрипту и уже им "парсить"

Удобная панель для доменных имен (http://panel.started.ru/) с массовыми операциями. Индивидуальные цены по запросу.
dkameleon
На сайте с 09.12.2005
Offline
386
#7
simka:
вообще идеальный вариант - это ЛЮБОЙ урл скармливать скрипту и уже им "парсить"

+1 тоже считаю наиболее оптимальным вариантом.

Дизайн интерьера (http://balabukha.com/)
[Удален]
#8

согласен с последними вариантами, но видимо человеку не нравится такой метод раз он идет в сторону опенсорс проектов и хочешь написать пару десятков правил для реврайта ))

psylosss
На сайте с 23.12.2005
Offline
126
#9

antono, Алексей Барыкин, dkameleon, bearman, то, что вы предлагаете, лежит в области бизнес-логики. Я бы хотел обойтись без нее, и вынести все на уровень запросов.

Кол-во вариантов a|b|c ограничено и неизменно для данного проекта. Смысла городить тут бизнес-логику нет.

simka:
вообще идеальный вариант - это ЛЮБОЙ урл скармливать скрипту и уже им "парсить"

Можно поподробнее о преимуществах этого метода перед mod_rewrite?

bearman:
видимо человеку не нравится такой метод раз он идет в сторону опенсорс проектов и хочешь написать пару десятков правил для реврайта ))

При чем здесь опен-сорс?

psylosss добавил 27.05.2008 в 07:45

Алексей Барыкин:
А можно услышать изначальную задачу? Может к ней с боку подойти можно...

Примерно так: есть десяток разделов сайта. Каждый раздел - это сущность в БД со своим ID. Количество и название разделов не меняются. Предполагается, что разделы должны находиться по адресам

/name_a/

/name_b/

/name_c/

При открытии раздела нужно сделать запрос в БД для вывода, скажем, текста раздела. Сделать a|b|c первичным ключом - не вариант (т.к. ORM не поддерживает такую штуку, кроме того, структура разделов древовидная и есть повторяющиеся названия, например /name_a/ и /name_c/name_a/ - разные разделы).

antono
На сайте с 12.07.2004
Offline
286
#10
psylosss:
antono, Алексей Барыкин, dkameleon, bearman, то, что вы предлагаете, лежит в области бизнес-логики. Я бы хотел обойтись без нее, и вынести все на уровень запросов.

Кол-во вариантов a|b|c ограничено и неизменно для данного проекта. Смысла городить тут бизнес-логику нет.

Не знал что это так заумно называется :)

psylosss:

Можно поподробнее о преимуществах этого метода перед mod_rewrite?

Скриптом можно гораздо "полнее" обработать урл, то есть учесть вообще все.

psylosss:

Примерно так: есть десяток разделов сайта. Каждый раздел - это сущность в БД со своим ID. Количество и название разделов не меняются. Предполагается, что разделы должны находиться по адресам
/name_a/
/name_b/
/name_c/

При открытии раздела нужно сделать запрос в БД для вывода, скажем, текста раздела. Сделать a|b|c первичным ключом - не вариант (т.к. ORM не поддерживает такую штуку, кроме того, структура разделов древовидная и есть повторяющиеся названия, например /name_a/ и /name_c/name_a/ - разные разделы).

Я бы тогда не так сделал, а сразу:

/name_1/

/name_2/

/name_3/

Если это первичный ключ, а разделов всего 10, то какой смысл делать отдельную таблицу под эти разделы, сделайте просто массив как уже я предлагал. А если все таки таблица, то зачем делать индекс primary на 10 записей? И так будет быстро искать. Вообщем у вас все равно задача сводится к тому чтобы сообщить компьютеру что a=1, b=2, c=3 и т.д.

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий