Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Бесконечный цикл при модификации URL. (Maloxidian)
Author Message
Maloxidian
Guest





Карма: 388
   поощрить/наказать


PostPosted: Sun Jul 01, 2007 5:08 pm (написано за 5 секунд)
   Post subject: Бесконечный цикл при модификации URL.
Reply with quote

Здравствуйте.

Задача состоит в реврайтинге 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:
Code (Apache config): скопировать код в буфер обмена
RewriteRule ^(.*)$ /foo/$1 [флаги]
Однако, такое преобразование приводит к бесконечному циклы (что не-удивительно), ибо маска ^(.*)$ продолжает захватывать URL даже после преобразования.

Посему, надо сделать так, чтобы реврайтинг происходил только единожды. Попытки юзать различные флаги (L, NS, и тд.) и их комбинации никак не изменяли поведение mod_rewrite'а.


Была идея ввести что-то вроде запрещающего символа, и не пропускать URL-ы с ним, скажем так:
RewriteRule ^(([^~].*|))$ /~foo/$1
но это кривое решение, и я его использовать не стану.

Возникает вопрос: как тогда предовтратить возникновение инфинити-лупа?
Back to top
Владимир Хоменко
Участник форума



Joined: 11 Jun 2004
Posts: 427
Карма: 42
   поощрить/наказать

Location: Николаев, Украина

PostPosted: Mon Jul 02, 2007 12:04 pm (спустя 18 часов 55 минут; написано за 30 секунд)
   Post subject:
Reply with quote

Code (Apache config): скопировать код в буфер обмена
RewriteCond %{REQUEST_URI} !^/foo/
RewriteRule ^(.*)$ /foo/$1 [L]
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Mon Jul 02, 2007 1:37 pm (спустя 1 час 33 минуты; написано за 8 секунд)
   Post subject:
Reply with quote

Тогда преобразование
/foo/foo/foo/bar/ => /foo/foo/foo/foo/bar/
не будет работать
Back to top
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Mon Jul 02, 2007 8:40 pm (спустя 7 часов 2 минуты; написано за 2 минуты 43 секунды)
   Post subject:
Reply with quote

Maloxidian
Думаю, за счет переменной среды можно такое реализовать. Правилу разрешаете срабатывать только при нулевом значении переменной, и при срабатывании переключаете.
про префикс RDR_ не забудьте только
Back to top
View user's profile Send private message
Ksnk
Участник форума



Joined: 24 Jun 2005
Posts: 459
Карма: 49
   поощрить/наказать

Location: СПб

PostPosted: Tue Jul 03, 2007 11:52 pm (спустя 1 день 3 часа 11 минут; написано за 3 минуты 18 секунд)
   Post subject:
Reply with quote

Можно rewrite'ится до тех пор, пока не наткнемся на файл. К примеру так:

RewriteCond ${REQUEST_FILENAME} !-f
RewriteCond ${REQUEST_URI} !foo/foo/foo/foo/foo/foo
RewriteRule ^(.*)$ /foo/$1 [L]

Вторая строчка - если файл так и не будет найден. Нужно написать максимальное количество foo +1
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML