ФорумПрограммированиеPHP для идиотов → mod_rewrite: переменное количество параметров в URL

mod_rewrite: переменное количество параметров в URL

  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 30 сентября 2008 г. 5:22

    Че-то я туплю. Нужно разобрать строку, типа:
    [tt]site.com/param1-value1/param2-value2/param3-value3[/tt] … и т.д.

    и превратить её в нечто, типа:
    [tt]site.com/index.php?param1=value1¶m2=value2¶m3=value3[/tt] … и т.д.

    Пробовал так:
    RewriteRule ^(([a-z0-9]+)\-([a-z0-9\-]+)\/?)*/?$ index.php?$2=$3


    Непойму как
    во-1: выбрать все совпадения, а не только последние (как preg_match_all в PHP)\
    во-2: поместить их адрес-результат, я ж не могу в .htaccess циклом их добавлять.

    Или может не химичить и через тот же mod_rewrite передать всю строку запроса одной параметром и сценарии её разобрать explode'ами и preg'ами?
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 30 сентября 2008 г. 5:23, спустя 1 минуту 4 секунды

    а почему не разобрать её в php?
    все умрут, а я изумруд
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 30 сентября 2008 г. 5:25, спустя 2 минуты 5 секунд

    ваще ход мыслей правильный
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 30 сентября 2008 г. 5:26, спустя 13 секунд

    Точно. Весь запрос в index.php перенаправляй, а там разбирай уже.
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 30 сентября 2008 г. 5:33, спустя 7 минут 34 секунды

    Хм, в такой ситуации я бы тоже отдал PHP сценарию…
    Однако всетаки интересно, может есть какой-то флаг для mod_rewrite для "глобального поиска" по всей строке
    adw/0
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 30 сентября 2008 г. 5:34, спустя 39 секунд

    В чём сила, брат?
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 30 сентября 2008 г. 8:16, спустя 2 часа 42 минуты 26 секунд


    В чём сила, брат?


    Больше всего в собственном интересе…. Ну и почему бы, не разруливать это апачу всетаки самому?))
    adw/0
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 30 сентября 2008 г. 8:25, спустя 8 минут 46 секунд

    Ok, смирился :)

    Только передать всю строку запроса тоже теперь не получается:
    [tt]RewriteRule ^(.*)$ index.php?args=$1[/tt]
    - вне зависимости от строки запроса в $_GET['args'] получается просто 'index.php' и всё.

    Ещё пробовал так:
    [tt]RewriteRule ^([a-zA-Z0-9_\/])*$ index.php?args=$0[/tt]
    - в принципе работает, но в запросе могут быть любые символы, кроме [a-zA-Z0-9_\/], как-то обломно все указывать.

    Не пойму, почему при указании (.*) не получается. Откуда вообще берется строка 'index.php'?
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 30 сентября 2008 г. 8:27, спустя 1 минуту 46 секунд

    А ты вообще весь запрос отправляй в index.php.
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php [L,QSA]


    А в index.php обрабатывай $_SERVER['REQUEST_URI'] — это и будет запросом.
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 30 сентября 2008 г. 9:49, спустя 1 час 22 минуты 38 секунд

    aivee, спс :)
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 30 сентября 2008 г. 10:18, спустя 28 минут 49 секунд

    Хм, в такой ситуации я бы тоже отдал PHP сценарию…
    Однако всетаки интересно, может есть какой-то флаг для mod_rewrite для "глобального поиска" по всей строке

    Почитал документацию по mod_rewrite, так и не смог найти подобного флага…
    adw/0
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 30 сентября 2008 г. 10:21, спустя 2 минуты 48 секунд

    Видимо потому, что его нет (:
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 30 сентября 2008 г. 10:26, спустя 4 минуты 32 секунды

    aivee, или потому, что плохо искал ;)
    adw/0
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 30 сентября 2008 г. 11:28, спустя 1 час 2 минуты 13 секунд

    aivee, хуясе карму за один день прокачал о_О =)))
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 30 сентября 2008 г. 22:02, спустя 10 часов 34 минуты 27 секунд

    номинация "Качок года" :)
    все умрут, а я изумруд

Пожалуйста, авторизуйтесь, чтобы написать комментарий!