Ich habe schon lange keinen technischen Artikel mehr geschrieben. Wenn Sie ihn nicht verstehen, lesen Sie einfach noch ein paar Artikel oder antworten Sie am Ende des Artikels (das ist der effektivste Weg). Um Ihnen bei der Beantwortung Ihrer Zweifel zu helfen,
bin ich hierher gekommen, um diesen Artikel zu finden. Sie sollten alle wissen, was ein Domänenname der zweiten Ebene ist. Bevor ich jedoch darüber diskutiere, müssen Sie zunächst ein ideologisches Problem verstehen.
Das Problem, das viele Freunde nicht herausfinden konnten (ich konnte es vor ein paar Tagen auch nicht herausfinden), ist, dass die URL nach der Eingabe einer Adresse neu geschrieben wird.
Schritt 1: Geben Sie eine Adresse in den Browser ein, z. B. http://blog.downcodes.com , und klicken Sie auf die Eingabetaste. Was passiert?
Um das Problem zu vereinfachen, möchte ich es so erklären:
Schritt 2: Zuerst wird die eingegebene Adresse analysiert und schließlich an IIS zur Verarbeitung übergeben. In der .net-Welt übergibt IIS eine solche Anfrage schließlich an einen Webprozessor Der Webprozessor gibt die Verarbeitungsergebnisse an den Browser zurück und zeigt sie dem Benutzer an.
Bitte ignorieren Sie dieses Problem nicht. Alles im zweiten Schritt wird auf der Serverseite erledigt. Wenn diese Dinge passieren, ändert sich die Adresse im Browser des Clients nicht, selbst wenn der Webprozessor das Verarbeitungsergebnis zurückgibt , die oben genannte Adresse ändert sich nicht.
Die URL, die Sie zu Beginn eingeben, fungiert nur als Klopfen an der Tür. Nur Ihre Augen können die Adresse sehen.
Das Problem, das verstanden werden muss, besteht darin, dass das sogenannte URL-Rewriting nur eine Insidergeschichte ist, die den Webentwicklern bekannt ist. Der Benutzer hat keine Ahnung, was vor sich geht. Er denkt, dass die von ihm eingegebene Adresse das Ergebnis ist, das angezeigt werden sollte Mit anderen Worten: Wir steuern, was hinter den Kulissen angezeigt wird.
Als nächstes ist zu überlegen, wie der angezeigte Inhalt gesteuert werden kann.
Aus dem oben erwähnten Prozess geht hervor, dass die Arbeit des Webprozessors manipuliert werden muss.
Eine der einfachsten Überlegungen besteht darin, dass der Benutzer eine einfache Adresse ohne Parameter eingibt: http://blog.downcodes.com und dann Wir Ändern Sie diese Adresse in eine Adresse mit Parametern, die den Anforderungen des Programms entsprechen, http://kerry.com?lover=notus , und verarbeiten Sie sie schließlich.
In diesem Schritt findet das sogenannte URL-Rewriting statt.
In .net-Begriffen müssen wir ein http-Modul registrieren, damit die Anwendung bestimmte URLs verarbeiten kann
Registrieren Sie httpmodule in web.config,
entspricht in etwa diesem Programm
im von uns bereitgestellten httpmodule-Programm
// Verwenden Sie unser httpmodule-Programm, um die ursprüngliche URL abzufangen
String OriginalUrl=“ http://blog.downcodes.com “;
// Verarbeiten Sie die ursprüngliche URL und erhalten Sie die letzte erforderliche URL. Der Wert ist http://kerry.com?lover=notus
String FinalUrl=Rewrite(OriginalUrl);
// context sendet die URL intern zur Verarbeitung erneut an IIS
context.RewritePath(FinalUrl);
Als nächstes implementieren wir das Umschreiben der URL.
,
welche URLs neu geschrieben werden müssen. Schritt 2: Schreiben Sie einen httpmodule-Handler. Schritt 3: Integrieren Sie das geschriebene httpmodule in das Webprogramm und beginnen Sie mit der Arbeit
. Der Prozess ist der gleiche, egal ob es sich um einen Domainnamen der zweiten Ebene oder einen Domainnamen der dritten Ebene handelt, solange wir ihn abfangen Diese URL-Adresse können wir während der Verarbeitung manipulieren
, aber es gibt Experten im Internet, die ein solches Programm für uns geschrieben haben:
http://www.microsoft.com/ china/msdn/library/webservices/asp.net/URLRewriting.mspx
http://www.cnblogs.com/jzywh/archive/2005/09/29/246650.html
http://www.cnblogs.com/jzywh/ archive/2006/02/20/334004.htmlDer
Artikel ist zu Ende.
Während des Implementierungsprozesses werden Sie auf einige Probleme stoßen, die größtenteils darauf zurückzuführen sind, dass Sie den obigen Artikel nicht sorgfältig gelesen haben, aber um ehrlich zu sein, ist es nicht einfach, ihn zu lesen Ein langer Artikel. Lassen Sie mich unten einige wichtige Fragen aufzeichnen. Verwenden Sie einen bestimmten Code, um zu zeigen, wie mit der umgeschriebenen Ziel-URL umgegangen wird, um unsere Anforderungen zu erfüllen
Was ist der URLRewriter von Microsoft? Wo kann ich dieses Projekt herunterladen?
Dies ist ein Beispielprogramm, das in einem Artikel über msdn zur Einführung von URLRewriter bereitgestellt wird. Es kann hier heruntergeladen werden.
http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
Wie verwendet man diese Codes? Ist es problematisch?
Natürlich ist es kein Problem. Hier sind die Dinge, die Sie tun können:
Laden Sie den Code auf Ihren Computer herunter.
Fügen Sie nach der Installation das URLRewriter-Projekt zu Ihrem eigenen Projekt hinzu, folgen Sie der oben angegebenen Methode, ändern Sie die Codekonfiguration web.config und beginnen Sie mit der Verwendung.
Was ist httpmodule?
Ein einfaches Verständnis ist, dass es sich um ein Programm handelt, das http-Anfragen verarbeitet. Weitere Informationen finden Sie in der SDK-Dokumentation.
Wie implementiert man eine Pan-Resolution?
Fügen Sie zunächst einen Domänennamen der zweiten Ebene von *.kerry.com zum Domänennamendienstanbieter hinzu, der auf Ihre Server-IP verweist
Erstellen Sie dann eine Site in IIS, lassen Sie den Host-Header dieser Site leer und der allgemeine Port ist 80. Diese Site ist die Standardwebsite für den gesamten Server-Port 80.
Fügen Sie dieser Site eine Platzhalter-Anwendungszuordnung hinzu (IIS-Site-Eigenschaften->Home-Verzeichnis->Konfiguration). Der Zweck dieser Zuordnung besteht darin, dass asp.net ISAPI alle sekundären Domänennamen-Sites übernimmt, die nicht in IIS angegeben sind.
Was passiert, wenn Sie einen Second-Level-Domainnamen eingeben?
Wenn IIS erkennt, dass es sich bei der eingehenden URL um einen Domänennamen der zweiten Ebene handelt, prüft es zunächst, ob eine Site mit diesem Domänennamen der zweiten Ebene auf IIS registriert ist. Wenn dies der Fall ist, erfolgt die Übertragung auf diese Site Zur Standard-Site ist diese Standard-Site die Site mit einem zuvor konfigurierten Host-Header, der leer ist. Daher kann ein Port nur eine Site mit einem leeren Host-Header haben.
Wir haben asp.net ISAPI eingerichtet, um diese obdachlosen Kinder zu übernehmen. Schreiben Sie ein Programm, um die eingehende URL zu analysieren und das Umschreiben durchzuführen.
Warum scheint mein httpmodule nicht zu funktionieren?
Nach dem Setzen eines Haltepunkts im httpmodule-Programm geht der Vorgang von hier aus nicht weiter. Der Grund dafür ist, dass Sie Ihr httpmodule-Programm nicht beim Webprogramm registriert haben erledigt in web.config Abgeschlossen in.
<system.web>
<httpModules>
<add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
</httpModules>
</system.web>
Warum erhalte ich immer die Meldung „Unbekannter Konfigurationsabschnitt RewriterConfig-Fehler“?
Dies liegt daran, dass Sie Ihren RewriterConfig-Konfigurationsabschnitt nicht im Webprogramm registriert haben.
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
Anschließend können Sie die Regeln mithilfe des Abschnitts RewriterConfig in <configuration> konfigurieren.
In welchem Teil von httpmodule wird die URL
hauptsächlich in der Methode „ModuleRewriter“
verarbeitet?
if (re.IsMatch(requestedPath))
Dies bestimmt natürlich, ob die eingehende URL die URL ist, die wir umschreiben möchten.
String sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, Rules[i].SendTo));
Hier wird die in web.config konfigurierte Ziel-URL empfangen.
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
Schreiben Sie die URL intern um.
Ich möchte den Domänennamen der zweiten Ebene in web.config nicht fest codieren, und die Ziel-URL, die ich umschreiben möchte, kann beispielsweise nicht fest codiert werden, wenn wir einen solchen Bedarf haben
Die eigentliche Verarbeitungsseite von blog.downcodes.com ist kerry.com/action.aspx?id=1
Die eigentliche Verarbeitungsseite von call.kerryl.com ist kerry.com/action.aspx?id=2
Die eigentliche Verarbeitungsseite von walkwith.kerry.com ist kerry.com/walk.aspx
Wie damit umgehen?
Zu diesem Zeitpunkt müssen Sie einige Manipulationen an den oben genannten Codes vornehmen.
if (re.IsMatch(requestedPath))
{
//Suchen Sie den Domainnamen der zweiten Ebene in der URL
string [] UserHost = app.Request.Url.Host.Split ( new Char [] { '.' } );
string domain2=UserHost [0];
//Legen Sie die Ziel-URL fest, die nach Bedarf neu geschrieben werden soll
string sendToUrl;
if(domain2==“Love“)
sendToUrl =“/action.aspx?id=1“;
else if(domain2==“ call“)
sendToUrl =“/action.aspx?id=2“;
sonst if(domain2==“walkwith“)
sendToUrl =“/walk.aspx“;
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
}
Wenn Sie Regeln in web.config konfigurieren, müssen Sie dies tun
<RewriterRule>
<LookFor>http://(w+).kerry.com</LookFor>
<SendTo>/test.aspx</SendTo>
</RewriterRule>
(w+) wird verwendet, um eine beliebige Zeichenfolge abzugleichen. Sie können hier alles andere in test.aspx schreiben, da wir es überhaupt nicht verwenden.
Ich habe viele Websites mit unsicheren Domänennamen der zweiten Ebene, aber die Seiten jeder Website werden anhand unterschiedlicher IDs ermittelt. Der Inhalt jeder Website mit Domänennamen der zweiten Ebene wird tatsächlich aus der Datenbank abgerufen.
Die Situation ist so
http://localhost/kerry/action.aspx?id=1 blog.downcodes.com/walk.aspx
http://localhost/kerry/action.aspx?id=14 like.kerry.com/walk.aspx
Jetzt passieren Wenn ich nach oben gehe, kann der ID-Parameter nicht angezeigt werden und wird in den Domänennamen der zweiten Ebene geändert. Was soll ich zu diesem Zeitpunkt
zuerst
tun?
<RewriterRule>
<LookFor>http://(w+).kerry .com walk.aspx</LookFor>
<SendTo>/action.aspx</SendTo>
</RewriterRule>
Dann handhaben Sie es im Programm so
//Den Domänennamen der zweiten Ebene abrufen
string [] UserHost = app.Request.Url.Host.Split ( new Char [] { '.' } );
string domain2=UserHost [0];
Erhalten Sie unterschiedliche Nummern basierend auf dem Domainnamen
int id=getIDfromDomain(domain2);
//Erhalten Sie die Basis-URL, die umgeleitet werden soll
string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, Rules[i].SendTo));
//ID-Parameter hinzufügen
if(id>0)
sendToUrl=string.Format ( "{0}?id={1}" , sendToUrl , id );
anders
sendToUrl=“error.aspx“;
//Umschreiben
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
Ich habe online gesucht und es gibt eine andere Lösung ...
Vielleicht beziehen Sie sich auf diesen Artikel
http://blog.csdn.net/mengyao/archive/2007/01/25/ 1493537 .aspx
Wie Sie sehen, sind die grundlegenden Methoden dieselben. Der Grund, warum dies nicht oben aufgeführt ist, liegt darin, dass dieser Ansatz etwas schwierig ist und möglicherweise zunächst nicht leicht zu verstehen ist es am Ende Wenn Sie diesen Artikel noch einmal lesen, werden Sie wahrscheinlich wissend lächeln
Viel Spaß beim Programmieren
Abschließender Hinweis: Ich hatte vor, diesen Artikel in ein paar Tagen zu veröffentlichen, aber gerade habe ich versehentlich alle Programme, die ich in den letzten Tagen geschrieben habe, aus VSS gelöscht. Ich verabscheue diesen Artikel erneut Quellcode-Manager von Microsoft-_ -