Maloxidian
Guest
Карма: 388 поощрить/наказать
|
Posted: Sun Jul 01, 2007 5:08 pm (написано за 5 секунд)
Post subject: Бесконечный цикл при модификации URL.
|
|
Здравствуйте. Задача состоит в реврайтинге URL следующим образом: / => /foo/ /index.php => /foo/index.php /asdasd/pic.png = > /foo/asdasd/pic.png /foo/foo/foo/bar/ => /foo/foo/foo/foo/bar/ /foobar.php => /foo/foobar.php Разумеется, сделать это я хочу с помощью mod_rewrite:Однако, такое преобразование приводит к бесконечному циклы (что не-удивительно), ибо маска ^(.*)$ продолжает захватывать URL даже после преобразования. Посему, надо сделать так, чтобы реврайтинг происходил только единожды. Попытки юзать различные флаги (L, NS, и тд.) и их комбинации никак не изменяли поведение mod_rewrite'а. Была идея ввести что-то вроде запрещающего символа, и не пропускать URL-ы с ним, скажем так: RewriteRule ^(([^~].*|))$ /~foo/$1 но это кривое решение, и я его использовать не стану. Возникает вопрос: как тогда предовтратить возникновение инфинити-лупа?
|
|
Владимир Хоменко
Участник форума

Joined: 11 Jun 2004
Posts: 427
Карма: 42 поощрить/наказать
Location: Николаев, Украина
|
Posted: Mon Jul 02, 2007 12:04 pm (спустя 18 часов 55 минут; написано за 30 секунд)
Post subject:
|
|
|
|
Guest
Карма: 388 поощрить/наказать
|
Posted: Mon Jul 02, 2007 1:37 pm (спустя 1 час 33 минуты; написано за 8 секунд)
Post subject:
|
|
Тогда преобразование /foo/foo/foo/bar/ => /foo/foo/foo/foo/bar/ не будет работать
|
|
Maus
Модератор

Joined: 29 Jun 2003
Posts: 8151
Карма: 271 поощрить/наказать
Location: пос. Омсукчан Магаданской области
|
Posted: Mon Jul 02, 2007 8:40 pm (спустя 7 часов 2 минуты; написано за 2 минуты 43 секунды)
Post subject:
|
|
Maloxidian
Думаю, за счет переменной среды можно такое реализовать. Правилу разрешаете срабатывать только при нулевом значении переменной, и при срабатывании переключаете. про префикс RDR_ не забудьте только
|
|
Ksnk
Участник форума
Joined: 24 Jun 2005
Posts: 459
Карма: 49 поощрить/наказать
Location: СПб
|
Posted: Tue Jul 03, 2007 11:52 pm (спустя 1 день 3 часа 11 минут; написано за 3 минуты 18 секунд)
Post subject:
|
|
Можно rewrite'ится до тех пор, пока не наткнемся на файл. К примеру так: RewriteCond ${REQUEST_FILENAME} !-f RewriteCond ${REQUEST_URI} !foo/foo/foo/foo/foo/foo RewriteRule ^(.*)$ /foo/$1 [L] Вторая строчка - если файл так и не будет найден. Нужно написать максимальное количество foo +1
|
|