2012-10-11 4 views
2

J'essaie d'utiliser la réécriture d'URL et le routage de demande d'application pour réécrire vers une URL externe. Je l'ai mis en place la règle suivante:URL de réécriture vers une URL externe

<rewrite> 
    <rules> 
    <rule name="RewriteExternal" enabled="true" stopProcessing="true"> 
     <match url="patternToMatch/(.*)" /> 
     <action type="Rewrite" url="http://100.100.100.100/{R:1}" appendQueryString="false" logRewrittenUrl="false" /> 
    </rule> 
    </rules> 
</rewrite> 

Dans la règle, « patternToMatch » est le modèle que je suis en train de faire correspondre, et le serveur 100.100.100.100 est le serveur externe (en dehors de notre pare-feu) auquel je suis essayer de réécrire. J'ai activé la journalisation et voir que le modèle correspond, l'URL est réécrit de manière appropriée, mais alors je vois "ARR_WEBFARM_NOT_ROUTED" avec l'adresse IP 100.100.100.100. La demande est ensuite réécrite à la demande originale et la demande échoue.

Je comprends que pour les redirections internes que je pourrais ajouter le serveur interne à la ferme Web, mais cela ne s'applique pas aux serveurs externes. Est-il possible de réécrire sur des serveurs externes? Si oui, comment puis-je utiliser la batterie de serveurs Web et éviter l'erreur "ARR_WEBFARM_NOT_ROUTED"?

Merci pour toute aide.

Répondre

2

Pour votre information, je sais que c'est vieux, mais voici mes deux cents: ARR_WEBFARM_NOT_ROUTED peut être un « faux positif », comme dans mon cas, j'avais deux sites IIS locaux avec des règles identiques pour proxy inverse on travaillait et on n'a pas. Les deux sites avaient l'entrée ARR_WEBFARM_NOT_ROUTED, je suppose, parce que ni l'un ni l'autre n'avait de véritables entrées de ferme web, seulement les sites externes (bien que les sites que je réécrivais étaient aussi des sites IIS locaux). En outre, OP a dit "réécrit", et c'était aussi dans mes journaux de travail et de non-travail de sites, ce qui signifie qu'il ne peut pas être un pistolet fumant non plus.

Il s'avère que mon problème était en fait un conflit entre ARR et MVC. J'aurais pensé que ARR était plus haut dans le pipeline avant MVC, mais d'une certaine façon, MVC s'enfonce et essayera d'acheminer l'URL pré-réécrite d'origine causant ainsi 404. Je ne suis pas sûr de la cause exacte, mais un correctif a été de dire MVC d'ignorer les URL de réécriture (dans Global.asax.cs ou RouteConfig.cs):

routes.IgnoreRoute("rewrite_path_here/{*pathInfo}"); 

espoir qui aide quelqu'un.

+0

Spot sur. J'ai eu le même problème et c'était en effet MVC qui interceptait l'URL réécrite et qui servait un 404! Ajouté l'ignorer et son fonctionnement maintenant. Comment se fait-il que la règle de réécriture d'URL soit au niveau du serveur, donc elle ne devrait jamais arriver au niveau d'un site pour l'évaluer sûrement? Merci encore d'avoir publié ceci, j'ai classé mon numéro – LDJ