Xpoint
   [напомнить пароль]

RewriteRule для uri

Метки: [без меток]
2007-08-01 12:04:17 [обр] Александр Сохин(11/21)[досье]

есть регулярное выражение:
"^(.*)/(.*)/(.*)$", "url=$1&action=$2&id=$3"

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

Т. е. допустим, если будет строка:
/shop/categories/aviation/private/3/
то первые три слова передавались в 3 переменные, а остальные никуда не передавались, просто были и все.

спустя 32 минуты [обр] Дмитрий Попов(171/509)[досье]

А как Вы писали регулярку? Копипастом, или не думая?

Поясняю вопрос: Зачем в конце регулярки знак доллара?

спустя 1 минуту [обр] Дмитрий Попов(171/509)[досье]
Хотя стоп. Регулярка точно такая? В смысле 1 в один?
И что значит "не срабатывает"?
спустя 2 минуты [обр] Александр Сохин(11/21)[досье]
Дмитрий Попов[досье]
без доллара тоже не работает. (
"^(.*)/(.*)/(.*)", "url=$1&action=$2&id=$3"
и так не работает:
"^(.*)/(.*)/(.*).*", "url=$1&action=$2&id=$3"
спустя 1 минуту [обр] Александр Сохин(11/21)[досье]
не срабатывает - т. к. массив $_GET пустой!!! а должен содержать 3 переменные.
спустя 43 минуты [обр] Дмитрий Попов(171/509)[досье]
Так. Во первых, приведите полный код mod_rewrite.
Во вторых - причем тут PHP?
спустя 5 минут [обр] Александр Сохин(11/21)[досье]
весь код:
$this->cms->rewrite->set( "^(.*)$", "url=$1" );
$this->cms->rewrite->set( "^(.*)/(.*)$", "url=$1&action=$2" );
$this->cms->rewrite->set( "^(.*)/(.*)/(.*)", "url=$1&action=$2&id=$3" )
$this->cms->rewrite->parse();
спустя 1 час 42 минуты [обр] Алексей В. Иванов(509/2861)[досье]
сообщение промодерировано
Последнее правило ( (.*)/(.*)/(.*)" ) должно работать для всех URL'ов, где два слэша или больше. Дело в жадности. .* — захватывает всё, включая /. Поэтому, пишите [^/]* вместо .*.
спустя 14 минут [обр] Александр Сохин(11/21)[досье]

Алексей В. Иванов[досье]
я вот подозревал, что трабла в .* - просто редко с регулярами работаю...
Огромное спасибо. Вот так все ок:

$this->cms->rewrite->set( "^([^/]*)$", "url=$1" );
$this->cms->rewrite->set( "^([^/]*)/([^/]*)$", "url=$1&action=$2" );
$this->cms->rewrite->set( "^([^/]*)/([^/]*)/([^/]*).*", "url=$1&action=$2&id=$3" );

спустя 3 часа 14 минут [обр] Dennis F. Latypoff aka funky_dennis(4/78)[досье]
.*?
?
Powered by POEM™ Engine Copyright © 2002-2005