Question

Nous avons redessiné la structure en un site Web comportant plusieurs unités fonctionnelles. Maintenant, je veux rediriger (301) vers la nouvelle page.

IE:
était www.example.com/abc
maintenant www.example.com/default.aspx?article=abc

J'ai essayé d'utiliser Global.asax pour cela, et cela fonctionne correctement lorsque je le débogue.

        if (Request.RawUrl.Contains("abc"))
        {
            Response.RedirectLocation = "/default.aspx?article=abc";
            Response.StatusCode = 301;
            Response.StatusDescription = "Moved";
            Response.End();
        }

Donc, http: // localhost: 1234 / example / abc redirige correctement, mais (où 1234 est le port du serveur de débogage)

http: // localhost / exemple / abc ne redirige pas, il me donne un 404.

Des idées?

Informations complémentaires: Si je vais sur http: //localhost/exemple/abc/default.aspx , il est alors redirigé correctement.

Était-ce utile?

La solution

Eh bien, si le port indique que vous utilisez le serveur Web intégré (celui fourni avec VS), cela fonctionne probablement car cela toujours achemine les demandes via le framework ASP.NET.

Les demandes se terminant par / abc ne seront pas automatiquement acheminées via le framework ASP.NET car IIS pourrait ne pas "savoir". vous le voulez. Vous devez vérifier vos paramètres IIS pour vous assurer que ces demandes sont routées vers aspnet_isapi.dll

MODIFIER: vous devez pour cela ajouter un mappage générique :

  1. Dans le Gestionnaire IIS, développez l'ordinateur local, le dossier Sites Web, cliquez avec le bouton droit sur le site Web ou le répertoire virtuel souhaité, puis cliquez sur Propriétés.
  2. Cliquez sur l'onglet approprié: Répertoire de base, Répertoire virtuel ou Répertoire.
  3. Dans la zone Paramètres de l'application, cliquez sur Configuration, puis sur l'onglet Mappages.
  4. Pour installer une carte d'application générique, procédez comme suit:
    • Dans l'onglet Mappages, cliquez sur Ajouter ou insérer.
    • Saisissez le chemin d'accès à la DLL dans la zone de texte Exécutable ou cliquez sur Parcourir pour y accéder (par exemple, la dll ASP.NET 2.0 est à l'emplacement c: \ windows \ microsoft.net \ framework \ v2.0.50727 \ aspnet_isapi. dll sur ma machine)
    • Pour l'extension, utilisez ". * " sans guillemets, bien sûr
    • Sélectionnez les verbes que vous souhaitez rechercher (GET, HEAD, POST, DEBUG sont habituels pour ASP.NET, vous décidez)
    • Assurez-vous que " Moteur de script " ou "Moteur d'application" est sélectionné
    • Décochez la case "Vérifier que le fichier existe"
    • Cliquez sur OK.

Je suis peut-être déçu, mais si je le suis, j'espère que quelqu'un me corrigera. :)

Autres conseils

Vous devez utiliser la redirection de caractères génériques IIS, vous aurez besoin de quelque chose comme ceci;

 *; www.example.com/*; www.example.com/default.aspx?article=<*>

Il existe une référence raisonnable à Microsoft

Si vous utilisez Apache, vous devrez peut-être modifier le fichier htaccess.

Testez-vous actuellement le site sur le serveur Web Visual Studio? Cela exécute généralement le site sur "localhost: nnnnn". où & nnnnn " est un numéro de port (comme ci-dessus est 1234), il ne le configure pas pour fonctionner sans un.

Si IIS est installé sur la machine concernée, publiez-y votre projet et vérifiez que celui-ci fonctionne sans l'option "nnnnn". car il ne semble pas y avoir quoi que ce soit dans votre code qui l’empêche de le faire.

Vous êtes-vous assuré que les fichiers web.config sont identiques pour chaque site Web (en supposant que 1234 est différent de: 80)

Aussi, avez-vous essayé localhost: 80?

Votre http: // localhost / exemple / abc n'invoque pas le fichier Global.asax comme vous le souhaiteriez. En règle générale, http: // localhost est exécuté sur le port 80 (: 80). Si vous souhaitez exécuter votre site sur le port 80, vous devrez déployer votre site dans IIS pour pouvoir l'exécuter ici.

Vous devez configurer un mappage de gestionnaire dans IIS pour transférer toutes les extensions inconnues vers asp.net. Le premier fonctionne parce que cassini gère toutes les demandes, le second ne fonctionne pas car IIS recherche ce répertoire et il n’existe pas au lieu du framework .net exécutant le code que vous avez.

Voici des informations sur la procédure à suivre pour la réécriture d'URL dans asp.net .

Si possible, toutefois, je suggérerais d'utiliser le nouveau Routage des demandes d'application ou < a href = "http://www.urlrewriting.net/149/fr/home.html" rel = "nofollow noreferrer"> UrlRewrite.net

Par défaut, IIS ne transfère pas toutes les demandes à ASP.NET pour le traitement. Seules certaines extensions de ressources, parmi celles-ci "aspx". sera passé à asp.net pour la manipulation. Que se passe-t-il lorsque vous demandez http: // localhost / example / abc que IIS essaie de localiser le répertoire à voir si vous avez un fichier par défaut (par exemple, default.aspx, index.html) à charger à partir de ce répertoire. Puisqu'il ne trouve pas le répertoire contenant le courrier indésirable, "abc " balise qu'il contient, il ne trouve jamais le fichier default.aspx à charger.

Lorsque vous essayez de charger http: //localhost/exemple/abc/default.aspx , IIS voit le message "aspx". extension et la transmet immédiatement au runtime ASP.NET pour la gestion. La raison pour laquelle la demande http: // localhost / exemple / abc ne se charge pas, c'est qu'elle n'est jamais remise. à ASP.NET, bien entendu, le fichier global.asax ne le voit jamais.

Le site hébergé par Cassini gère toutes les demandes. Cet appel est donc traité par ASP.NET et le fichier global.asax.

Je suis d'accord avec Darren Kopp, qui a suggéré que vous deviez configurer le mappage des gestionnaires dans IIS pour transférer des extensions inconnues vers ASP.NET.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top