Frage

Wir haben die Struktur einer Website neu gestaltet, die mehrere Geschäftseinheiten hat. Jetzt will ich (301) auf die neue Seite umgeleitet werden.

IE:
war www.example.com/abc
jetzt www.example.com/default.aspx?article=abc

Ich habe versucht, Global.asax zu verwenden, um dies zu tun, und es funktioniert, wenn ich durch sie debuggen.

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

So http: // localhost: 1234 / example / abc umleitet richtig, aber (wo 1234 ist der Port für den Debug-Server)
http:. // localhost / example / abc nicht umleiten, es gibt mir eine 404

Irgendwelche Ideen?


Weitere Informationen: Wenn ich an http: //localhost/example/abc/default.aspx dann leitet es richtig.

War es hilfreich?

Lösung

Nun, wenn die Port zeigt an Dich mit dem integrierten Web-Server (die, die mit VS kommt), das funktioniert wahrscheinlich, weil das immer Routen durch den ASP.NET-Framework anfordert.

Endung Requests mit / abc wird nicht automatisch Route durch das Framework ASP.NET, da IIS kann nicht „wissen“ Sie wollen, dass sie. Sie benötigen IIS-Einstellungen zu überprüfen, dass solche Anfragen zu machen, um die aspnet_isapi.dll geroutet werden


EDIT: Um dies zu erreichen, müssen Sie ein Wildcard-Mapping :

  1. In IIS-Manager den lokalen Computer, erweitern Sie den Ordner Websites rechten Maustaste auf die Website oder das virtuelle Verzeichnis, das Sie möchten, und dann auf Eigenschaften.
  2. Klicken Sie auf die entsprechenden Registerkarte. Verzeichnis, Virtuelles Verzeichnis oder Verzeichnis
  3. Im Bereich Anwendungseinstellungen auf Konfiguration und dann auf die Registerkarte Zuordnungen klicken.
  4. Um eine Wildcard Anwendung Karte zu installieren, gehen Sie wie folgt vor:
    • Auf der Registerkarte Zuordnungen auf Hinzufügen oder Einfügen.
    • den Pfad zu der DLL im Executable Textfeld einen oder Durchsuchen, um es zu navigieren klicken (zum Beispiel des ASP.NET 2.0-DLL in c: \ windows \ microsoft.net \ Framework \ v2.0.50727 \ aspnet_isapi. dll auf meinem Rechner)
    • Zur Erweiterung verwenden "*" ohne Anführungszeichen, natürlich
    • Wählen Sie die Verben, nach dem Sie suchen möchten (GET, HEAD, POST, DEBUG sind die üblichen für ASP.NET, Sie entscheiden)
    • Stellen Sie sicher, "Script-Engine" oder "Application Engine" ausgewählt
    • Deaktivieren Sie die Option "Überprüfen Sie die Datei existiert"
    • Klicken Sie auf OK.

ich auf diese aus sein kann, aber wenn ich bin, hoffentlich wird jemand mich korrigieren. :)

Andere Tipps

Sie sollten die IIS Wildcard-Umleitung verwenden, werden Sie so etwas wie dieses benötigen;

 *; www.example.com/*; www.example.com/default.aspx?article=$0

Es gibt eine angemessene Referenz auf Microsoft

Wenn Sie Apache verwenden denke ich, Sie werden die .htaccess-Datei ändern müssen.

Testen Sie zur Zeit die Website in dem Visual Studio-Web-Server? Das läuft in der Regel die Seite auf „localhost: nnnnn“. Wobei „nnnn“ ist eine Portnummer (wie oben 1234), ist es nicht ohne einen auf auszuführen gesetzt

Wenn Sie auf dem Rechner installiert IIS haben besorgt, veröffentlichen Sie Ihr Projekt, um es und Sie sollen in der Lage sein zu überprüfen, ob es ohne die „nnnnn“ funktioniert, da es nichts in Ihrem Code sein, sieht die dazu führen würde, es nicht so tun.

Haben Sie sich vergewissert die web.config-Dateien sind die gleichen für jede Website (unter der Annahme: 1234 ist anders: 80)

Auch Sie haben versucht, localhost: 80

http: // localhost / example / abc nicht die Global.asax Aufruf wie Sie es erwarten. Typischerweise http: // localhost läuft auf den Port 80 (80). Wenn Sie Ihre Website auf Port 80 ausgeführt werden soll, müssen Sie Ihre Website in IIS bereitstellen hier auszuführen.

Sie benötigen einen Handler Mapping in IIS einrichten, um alle unbekannten Erweiterungen asp.net weiterleiten. Die erste funktioniert, weil Cassini alle Anforderungen der Handhabung, der zweite nicht funktioniert, weil IIS für das Verzeichnis suchen, und es existiert nicht, anstelle des .net Framework läuft der Code, den Sie haben.

Hier Informationen darüber, wie zu tun URL in asp.net Umschreiben .

Wenn möglich, allerdings würde ich vorschlagen, die neue Anwendungsanforderungen mit Routing oder < a href = "http://www.urlrewriting.net/149/en/home.html" rel = "nofollow noreferrer"> UrlRewrite.net

IIS, die standardmäßig von Hand nicht alle Anfragen über zu ASP.NET für die Handhabung. Nur einige Ressourcenerweiterungen, darunter „aspx“ wird übergangen für die Handhabung ASP.NET. Was passiert, wenn Sie fordern http: // localhost / example / abc ist, dass IIS das Verzeichnis zu suchen versucht, um zu sehen, wenn Sie eine Standarddatei (dh default.aspx index.html) aus diesem Verzeichnis zu laden. Da es nicht das Verzeichnis mit der Junk „abc“ Tag darin finden kann, ist es nie die default.aspx-Datei findet zu laden.

Wenn Sie versuchen, laden http: //localhost/example/abc/default.aspx sieht IIS die „aspx“ Erweiterung und sofort übergibt sie an die ASP.NET-Laufzeit für die Handhabung. Der Grund, dass die http: // localhost / example / abc Anfrage nicht geladen ist, dass es nie übergeben wird zu ASP.NET, so natürlich sieht der global.asax nie.

Die Cassini gehostete Website kümmert sich um alle Anfragen, so wird dieser Anruf von ASP.NET und die Datei global.asax behandelt bekommen.

Ich stimme mit Darren Kopp, der vorschlug, dass Sie Handler Mapping in IIS einrichten müssen unbekannte Erweiterungen ASP.NET zu übermitteln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top