RewriteRule в htaccess

A
На сайте с 09.01.2013
Offline
33
522

Всем доброго времени суток. Подскажите пожалуйста как построить редирект, чтобы ссылка вида


http://site.ru/catalog/(тут не известное количество каталогов)/.kino.html

Вот, что есть у меня:


RewriteRule ^catalog/(.*).html$ index.php?B=product&id=$1 [L]

Как, я понимаю, вот сюда ^catalog/ТУТ ЧТО ТО ДОЛЖНО БЫТЬ/(.*).html$ нужно, что то вставить, а вот что именно никак не могу понять.

VHS-1980
На сайте с 21.05.2010
Offline
91
#1

Редирект или перенаправление запроса на исполняемый скрипт с параметрами?

A
На сайте с 09.01.2013
Offline
33
#2
VHS-1980:
Редирект или перенаправление запроса на исполняемый скрипт с параметрами?

Я не совсем понял о чем Вы.

Все же, пере направление.

Все, что /ПАРАМЕТР.html

передается в скрипт, и по этому параметру, код отображает информацию.


index.php?B=product&id=$1

Задача заключается в том, что я хочу вставлять между catalog/ и параметром еще неопределенное количество /pechenki/moloko/kefir/ подкаталогов, которые не будут нести никакого параметра и самое главное их количество заранее не известно.

VHS-1980
На сайте с 21.05.2010
Offline
91
#3

Если я правильно все понял, то в первой части правила надо использовать что-то похожее на:

^/([a-z]+)\.html$ index.php?B=product&id=$1

правда в [a-z] надо указать все допустимые символы. Но это слишком упрощенное правило, если направление мысли я понял правильно, то его надо будет слегка подправить

вообще постановка вопроса с произвольным url - это в корне неправильно. ЧПУ изначально - приведение строки запроса в понятный юзеру вид. Да и проблемы потом возможны с дублями страниц и т.п.

Сам получаю все параметры из урл в скрипте - удобнее намного.

ИМХО чем короче url - тем лучше.

A
На сайте с 09.01.2013
Offline
33
#4

Наверное я плохо изъяснился, попробую по другому:

Вот имею правило:


RewriteRule ^catalog/(.*).html$ index.php?B=product&id=$1 [L]

По ссылке, site.ru/catalog/moloko.html я попадаю на страницу с описанием молока, соответственно, если я перейду по ссылке index.php?B=product&id=moloko я попаду на ту же страницу, а мне нужно, если я ввиду:

site.ru/catalog/moloko.html

site.ru/catalog/new/moloko.html

site.ru/catalog/new/zelenoe/moloko.html

site.ru/catalog/new/zelenoe/vkusnoe/moloko.html

site.ru/catalog/new/zelenoe/vkusnoe/derevenskoe/moloko.html

я по всем этим ссылкам должен попасть на страницу index.php?B=product&id=moloko

Второй день голову ломаю.

VHS-1980
На сайте с 21.05.2010
Offline
91
#5

Не ломайте голову.

Во-первых нужно экранировать точку перед html.

Во-вторых для Вашей цели с перечисленными адресами регулярка будет работать.

Если действие выражения нужно ограничить только псевдокаталогом catalog - нужно немного ее модифицировать.

RewriteRule ^catalog/(.*).html$ index.php?B=product&id=$1 [L]
RewriteRule ^/catalog(.*)/([a-z]+)\.html$ index.php?B=product&id=$2 [L]

как то так, но я не спец по регуляркам - по идее должно работать

A
На сайте с 09.01.2013
Offline
33
#6

VHS-1980, большое спасибо Вам за помощь, без "/" перед catalog, все заработало.

VHS-1980
На сайте с 21.05.2010
Offline
91
#7
antyan:
VHS-1980, большое спасибо Вам за помощь, без "/" перед catalog, все заработало.

Ну я предупреждал, что я небольшой спец по регуляркам. Удачи! =)

siv1987
На сайте с 02.04.2009
Offline
427
#8
antyan:
По ссылке, site.ru/catalog/moloko.html я попадаю на страницу с описанием молока, соответственно, если я перейду по ссылке index.php?B=product&id=moloko я попаду на ту же страницу, а мне нужно, если я ввиду:

Имхо, с этого надо было начинать с самого начало.

Еще как вариант

RewriteRule ^catalog/([^/]+/)*(\w+)\.html index.php?B=product&id=$2 [L]

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