|
|
|
| Мне нужно реализовать переадресацию с добавлением одного параметра (url)
примеры:
1:
aaa/bbb/ccc
преобразовать в
view.php?url=aaa/bbb/ccc
|
2:
aaa/bbb/ccc?mode=nnn
преобразовать в
view.php?mode=nnn&url=aaa/bbb/ccc
|
т. е. необходимо сохранить все параметры переданные от пользователя | |
|
|
|
|
|
|
|
для: faeton
(05.05.2008 в 09:16)
| | По первому примеру у меня работает конструкция:
RewriteRule ^(([a-z]+)(\/)([a-z]+)(\/)([a-z]+))$ view.php?url=$1
|
А по второму непонятно, зачем городить: ?mode=nnn
добавьте просто aaa/bbb/ccc/nnn, а в правилах считайте nnn, как вторую переменную.
Вот здесь я отвечала на подобный вопрос.
Только у вас aaa/bbb/ccc - это одна переменная, поэтому и описывается она одним выражением, а в том примере 3 разных переменных, соответственно 3 выражения. | |
|
|
|
|
|
|
|
для: faeton
(05.05.2008 в 09:16)
| | Добавь &%{QUERY_STRING} к адресу перенаправления. | |
|
|
|
|
|
|
|
для: Atheist
(06.05.2008 в 11:03)
| | Вот так что ли вы советуете?
RewriteRule ^(([a-z]+)(\/)([a-z]+)(\/)([a-z]+))?$ view.php?url=$1&%{QUERY_STRING}
Или без вопроса? | |
|
|
|
|
|
|
|
для: Eugene77
(06.05.2008 в 20:32)
| | Я еще плохо знаю регулярные выражения
что значит
В моей задаче необязательно будет
могут быть и другие варианты
у меня было реализованно аналогичное но с меньшими возможностями так
RewriteRule ^$ /article/index.php
RewriteRule ^([0-9\w/]+)/([0-9\w]+)$ /article/index.php?dir=$1&fn=$2
RewriteRule ^([0-9\w/]+)/$ /article/index.php?dir=$1
RewriteRule ^([0-9\w/]+)&([\w]+)$ /article/index.php?fn=$1&mode=$2
|
| |
|
|
|
|
|
|
|
для: Eugene77
(06.05.2008 в 20:32)
| | > Вот так что ли вы советуете?
Да.
> что значит
> (\/)
Это что-то напоминает...:)) А вообще это ошибка: экранировать слеш тут не надо и скобочки не нужны, т.е. просто "/" ( без кавычек) | |
|
|
|
|
|
|
|
для: Atheist
(07.05.2008 в 12:32)
| | В примере:
url=aaa/bbb/ccc
aaa/bbb/ccc - это значение переменной url и ее нужно описать с экранированием слеша, т.к. в данном случае это составляющая переменной (я, правда, не понимаю, зачем в значении слеши).
Можно, конечно, и по-другому описать, в зависимости от того, какие значения может принимать переменная url | |
|
|
|
|
|
|
|
для: Maya
(07.05.2008 в 13:08)
| | > в данном случае это составляющая переменной
Нет тут никаких переменных для mod_rewrite. Это просто строка "url=aaa/bbb/ccc". | |
|
|
|
|
|
|
|
для: Atheist
(07.05.2008 в 13:33)
| | Документация, в которой описаны 3 типа переменных в правилах преобразования строки с помощью программного модуля mod_rewrite веб сервера Apache и регулярных выражений. | |
|
|
|
|
|
|
|
для: Maya
(07.05.2008 в 14:30)
| | Maya, процитируете оттуда то место, которое пытаетесь объяснить мне?
> В примере:
> url=aaa/bbb/ccc
> aaa/bbb/ccc - это значение переменной url и ее нужно описать с экранированием слеша
Вы предлагаетe "url=aaa\/bbb\/ccc"? | |
|
|
|
|
|
|
|
для: Atheist
(08.05.2008 в 13:11)
| | Вы предлагаетe "url=aaa\/bbb\/ccc"?
Нет. Думаю, что мы вообще говорили с вами о разных вещах.
Из вопроса следует, что строка "view.php?url=aaa/bbb/ccc" - это исходная строка,
где $_GET['url']="aaa/bbb/ccc";
т.е. значение переменной url, которая может принимать значения:
ddd/eee/fff, jjj/hhh/iii и т.д.
Именно в этом контексте я предложила вышенаписанное правило,не додумывая и не спрашивая, зачем в значении переменной слеши. Я не права? Поправьте меня.
А ссылка на мануал в ответ на фразу Нет тут никаких переменных для mod_rewrite
Back-references are $N (N=0..9) identifiers which will be replaced by the contents of the Nth group of the matched Pattern. The server-variables are the same as for the TestString of a RewriteCond directive. The mapping-functions come from the RewriteMap directive and are explained there. These three types of variables are expanded in the order of the above list.
Хотя я слышала, что $N иногда называют и макросом. | |
|
|
|
|
|
|
|
для: Maya
(08.05.2008 в 19:36)
| | Ах вот Вы о чём :)
Попробуйте:
RewriteRule ^([a-z]+)/([a-z]+)/([a-z]+)$ index.php?url=$0
|
Я убрал экранирование слешей. Это что-то изменило?
> aaa/bbb/ccc - это значение переменной url и ее нужно описать с экранированием слеша, т.к. в данном случае это составляющая переменной
И не видел я в той же доментации указание на то, что надо экранировать слеши, в случае когда они попадут в значение переменной. | |
|
|
|
|
|
|
|
для: Atheist
(08.05.2008 в 22:56)
| | Конечно, изменило, если, конечно, это правило не единственное. Вы хотите поговорить об этом? :))
И не видел я в той же доментации указание на то
Это в другой уже смотреть надо. Регулярные выражения :)
Хотя и не настаиваю. | |
|
|
|
|
|
|
|
для: Maya
(09.05.2008 в 03:38)
| | > Это в другой уже смотреть надо. Регулярные выражения :)
Слеш экранируется в PCRE, только если он используется в качестве ограничителей паттерна. В Perl и JavaScript, кажется, они фиксированные, в PHP, как Вы знаете, они могут быть любые, кроме alphanumeric и бекслеша, а в mod_rewrite это просто пробельные символы.
> Конечно, изменило, если, конечно, это правило не единственное. Вы хотите поговорить об этом? :))
Я ничего не понял из этого. Да, хочу :) | |
|
|
|
|
|
|
|
для: Atheist
(07.05.2008 в 12:32)
| | Все, подходящий вариант найден спасибо
RewriteRule ^([\w/]+)$ /article/index.php?url=$1&%{QUERY_STRING}
RewriteRule ^$ /article/index.php?%{QUERY_STRING}
|
| |
|
|
|