2010-09-29 5 views
0

J'ai créé un module http pour gérer les remappages d'URL, et il fonctionne très bien sur mon système de test. Une demande de www.mydomain.com/Some_Fancy_URL est réécrite à www.mydomain.com/some.aspx?fancy=23 et ainsi de suite.httpModule pour 404

Lorsque je déploie sur le site Web actuel, j'obtiens la page IIS 404 par défaut. Après avoir effectué des recherches en ligne, il me semble que j'ai besoin de configurer "Wildcard Mapping" dans IIS 6 pour que la requête passe dans IIS et dans mon httpModule. Le problème est que le site est hébergé sur un serveur partagé, il n'est donc peut-être pas possible d'obtenir le FAI pour effectuer ce changement.

Ma question est, je ne peux pas utiliser un httpHandler pour dire à IIS comment je veux que ces demandes soient traitées? Par exemple:

<httpHandlers> 
    <add path="*.aspx" verb="GET,POST" type="System.Web.UI.PageHandlerFactory" validate="false"/> 
</httpHandlers> 

Il semblerait que l'ajout à mon web.config devrait dire à IIS pour arrêter de valider l'existence de fichiers .aspx, et il suffit de passer la demande ainsi que pour moi à traiter. Cela ne fonctionne pas cependant.

Des suggestions?

Répondre

2

Le problème avec IIS 6 et ASP.NET est qu'ils ne sont pas intégrés. IIS doit être renseigné sur ASP.NET via des mappages de script (.aspx, .asmx, wildcard, etc.).

Aucun de vos paramètres de configuration web.config n'influencera IIS car web.config est là pour configurer le comportement d'ASP.NET, pas IIS. IIS n'a pas connaissance de web.config. À moins que vous ne puissiez transmettre une requête au pipeline ASP.NET (via un script), rien ne se passera et tous vos paramètres web.config seront ignorés.

Avec IIS 7, l'histoire est assez différente. Dans IIS7, ASP.NET et IIS sont étroitement intégrés et partagent le même pipeline, ce qui vous permet d'atteindre le résultat que vous recherchez. L'alternative peut être de savoir si votre hébergeur exécute un réécriteur d'URL tel que ISAPI_Rewrite sur leurs serveurs. De cette façon, vous pouvez réécrire les URL sans avoir à mapper un script générique à IIS6.

1

Grâce à quelques essais et erreurs, ainsi qu'à d'autres recherches sur le Web, j'ai trouvé une solution. Cela correspond essentiellement à la réponse de Kev. IIS ne traitera pas une demande comme .NET à moins d'avoir une extension de fichier connue (.aspx, .ascx, etc.). Quand j'envoie quelque chose comme www.mydomain.com/anything il cherche un fichier ou un dossier nommé "n'importe quoi", et quand il n'en trouve pas, il tombe simplement sur le gestionnaire IIS 404 par défaut.

C'est là que j'ai pris le contrôle. J'ai changé IIS 6 pour transmettre 404 problèmes à /404.aspx. J'ai ensuite créé cette page avec un message générique "Votre fichier n'a pas été trouvé" dans le même style que mon site web.

est ici la bonne partie: Maintenant que IIS envoie 404 à une page de .NET, la coutume httpModule j'ai créé est avoir tiré. La requête est pour 404.aspx, mais IIS est assez bien pour ajouter également l'URL d'origine.Vous obtenez quelque chose comme:

www.mydomain.com/404.aspx?404;http://www.mydomain.com/anything 

Cela me permet d'analyser la demande dans le httpModule, et repassez au besoin!

Questions connexes