web-dev-qa-db-fra.com

IIS URL Rewrite - Réécriture des sous-dossiers pour interroger des chaînes

Je souhaite rediriger le trafic sur mon site Web en fonction de la règle suivante:

  • https://www.example.com/abc -> https://www.example.com/test1.aspx?c=abc
  • https://www.example.com/def -> https://www.example.com/test1.aspx?c=def

Je voudrais que le sous-dossier passe une chaîne de requête, j'ai essayé le code suivant mais malheureusement sans succès:

<rule name="Reditect1" stopProcessing="true">
    <match url="^(.*)test.com/(.*)" />
    <conditions>
        <add input="{R:2}" pattern="^[a-zA-Z0-9_]*$" />
    </conditions>
    <action type="Redirect" url="/test1.aspx?c={C:0}" appendQueryString="true" />
</rule>
1
Ron

Ainsi, après plus de recherches et d'essais et d'erreurs, j'ai été capable de le comprendre. Voici comment je l'ai configuré maintenant.

 <rule name="Redirect1" stopProcessing="true">
        <match url="^(.*)$" />
            <conditions>
                <add input="{R:0}" pattern="^(?!\s*$).+$"/>
                <add input="{R:0}" pattern="^[a-zA-Z0-9_]*$" />
            </conditions>
        <action type="Redirect" url="/test1.aspx?client={C:0}" appendQueryString="true" />
  </rule>

NOTE
La règle a été configurée au niveau du site et non au niveau du serveur dans IIS. Par conséquent, la correspondance de modèle a ignoré le nom de domaine.

^(.*)test.com/(.*) - tried matching a test.com after the actual qualified domain name. So www.test.com/test.com/abc would satisfy the condition and not www.test.com/abc

Explication

La règle correspond à n'importe quelle URL entrant - Motif (. *)

La première condition garantit que tout ce qui suit le nom de domaine qualifié comporte au moins un caractère autre que l'espace.

La deuxième condition garantit qu'il n'y a pas de caractères spéciaux dans la partie en cours d'analyse. C'était mon exigence.

1
Ron