2010-11-26 27 views
0

Je souhaite créer une règle de réécriture d'URL générique dans IIS 7.5 (sur Windows Web Server 2008 R2).IIS make URL Réécriture gourmande

Je voudrais correspondre à l'URL suivante:

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

Notez le slash (/) quand je voudrais correspondre un dossier, sinon il est un paramètre.

J'ai mis en place la règle suivante:

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

Il dispose de trois clauses correspondantes: {R: 1}, {R: 2} et {R: 3}. Cependant, quand je entrée le test-URL suivante:

folder1/param

Je reçois la réponse suivante:

{R: 1} est vide
{R: 2} = folder1
{R: 3} = param

Je soupçonne la réponse suivante:

{R: 1} = folder1
{R: 2} est vide
{R: 3} = param

I.e. Je veux dossier1 être mappé à la première partie du modèle de réécriture.

Je voudrais cartographier la règle de réécriture à:

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

Qu'est-ce que je manque pour obtenir le match pour être gourmand, à savoir la première clause correspondent possible?

Répondre

0

Je ne sais pas comment rendre le quantificateur facultatif ("?") Glouton dans IIS. Mais je voudrais essayer de faire la correspondance non ambigu, en enfermant la deuxième clause facultative dans le premier.

Ainsi, au lieu d'avoir les deux premières options côte à côte comme dans votre procès initial:

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

je suggère ceci:

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

Maintenant, le deuxième groupe ne peut correspondre si le premier fait match.

+0

Cela fonctionne. Je n'ai pas voulu aller à cette étape, parce que mon problème actuel a 4 niveaux (pas seulement les deux fournis dans la question pour illustrer le problème), mais néanmoins, cela semble être une bonne solution. – Gedde