IIS сделать URL переписать жадный - PullRequest
0 голосов
/ 26 ноября 2010

Я хотел бы создать общее правило перезаписи URL в IIS 7.5 (в Windows Web Server 2008 R2).

Я хотел бы сопоставить следующие URL:

www.mysite.com / param
www.mysite.com/folder1/
www.mysite.com/folder1/param
www.mysite.com/folder1/folder2/
www.mysite.com/folder1/folder2/param

Обратите внимание на косую черту (/), когда я хочу сопоставить папку,в противном случае это параметр.

Я установил следующее правило перезаписи:

^(?:([^/]+)/)?(?:([^/]+)/)?([^/]+)?$

У него есть три соответствующих условия: {R: 1}, {R: 2} и {R: 3}.Однако, когда я ввожу следующий тестовый URL:

folder1 / param

, я получаю следующий ответ:

{R: 1} isпусто
{R: 2} = папка1
{R: 3} = параметр

Я подозревал следующий ответ:

{R: 1} = папка1
{R: 2} пуст
{R: 3} = param

Т.е. я хочу, чтобы folder1 был сопоставлен с первой частью шаблона перезаписи.

Я хотел бы сопоставить правило перезаписи с:

/controller.php?folder1={R:1}&folder2={R:2}&param={R:3}

Чего не хватает, чтобы сопоставление было жадным, то есть соответствовало первому возможному предложению?

1 Ответ

0 голосов
/ 27 ноября 2010

Я не знаю, как сделать необязательный квантификатор ("?") Жадным в IIS. Но я бы попытался сделать совпадение однозначным , заключив в него второе необязательное предложение.

Таким образом, вместо того, чтобы располагать двумя первыми вариантами рядом друг с другом, как в исходном испытании:

^(?:([^/]+)/)?(?:([^/]+)/)?([^/]+)?$

Я предлагаю это:

^(?:([^/]+)/(?:([^/]+)/)?)?([^/]+)?$

Теперь вторая группа может соответствовать, только если первая действительно совпадает.

...