Je n'ai pas écrit d'article technique depuis longtemps. Si vous ne le comprenez pas, lisez simplement quelques articles supplémentaires ou répondez à la fin de l'article (c'est le moyen le plus efficace, je ferai de mon mieux). pour vous aider à répondre à vos doutes.
Je suis venu ici pour trouver cet article. , vous devriez tous savoir ce qu'est un nom de domaine de deuxième niveau, donc je ne dirai pas de bêtises. Mais avant de discuter, vous devez d'abord comprendre un enjeu idéologique.
Le problème que de nombreux amis n’ont pas pu comprendre (je n’y suis pas parvenu non plus il y a quelques jours) est qu’après avoir saisi une adresse, pourquoi l’URL est-elle réécrite ?
Étape 1 : saisissez une adresse dans le navigateur, par exemple http://blog.downcodes.com , puis cliquez sur Entrée. Que se passe-t-il ?
Afin de simplifier le problème, permettez-moi de l'expliquer comme ceci :
Étape 2 : Tout d'abord, l'adresse saisie est analysée et parvient finalement à un serveur Web. Elle est transmise à IIS pour traitement. Dans le monde .net, IIS transmettra une telle demande à un processeur Web pour traitement. Le processeur Web renvoie les résultats du traitement au navigateur et les affiche à l'utilisateur.
Veuillez ne pas ignorer ce problème. Tout dans la deuxième étape est effectué côté serveur. Lorsque ces choses se produisent, l'adresse sur le navigateur du client ne changera pas même si le processeur Web renvoie le résultat du traitement à la fin. , l'adresse ci-dessus ne changera pas.
L'URL que vous saisissez au début ne fait que frapper à la porte. Une fois la porte frappée, la fonction est terminée. Seuls vos yeux peuvent voir l'adresse. Le navigateur, le serveur, etc. ne connaissent pas cette adresse.
Le problème qu'il faut comprendre est que la soi-disant réécriture d'URL n'est qu'une histoire intérieure connue des développeurs Web. L'utilisateur n'a aucune idée de ce qui se passe. Il pense que l'adresse qu'il tape est le résultat qui devrait être affiché. l’écran. En d’autres termes, nous contrôlons ce qui est affiché dans les coulisses.
La prochaine chose à considérer est de savoir comment contrôler le contenu affiché ?
D'après le processus mentionné ci-dessus, il est évident que le travail du processeur Web doit être manipulé.
L'une des considérations les plus simples est que l'utilisateur entre une adresse simple sans aucun paramètre, http://blog.downcodes.com puis We. changez cette adresse en une adresse avec des paramètres qui répondent aux besoins du programme, http://kerry.com?lover=notus , et enfin traitez-la.
La soi-disant réécriture d'URL se situe à cette étape.
En termes .net, nous devons enregistrer un module http pour que l'application gère des URL spécifiques
Enregistrez le module http dans web.config,
est à peu près équivalent à ce programme
dans le programme httpmodule que nous fournissons
// Utilisez notre programme httpmodule pour intercepter l'URL d'origine
String OriginalUrl=" http://blog.downcodes.com " ;
// Traitez l'URL d'origine et obtenez la dernière URL requise, la valeur est http://kerry.com?lover=notus
Chaîne FinalUrl=Réécriture(OriginalUrl);
// le contexte renvoie l'URL en interne à IIS pour traitement
context.RewritePath(FinalUrl);
Ensuite, nous implémentons la réécriture d'URL.
Étape 1 : Déterminez quelles URL doivent être réécrites, c'est-à-dire formulez des règles de réécriture. Étape 2 : Écrivez un gestionnaire de module http Étape 3 : Intégrez le module http écrit dans le programme Web et commencez à travailler
. , et en utilisant la réécriture d'URL pour implémenter un nom de domaine de deuxième niveau, le processus est le même. Car qu'il s'agisse d'un nom de domaine de deuxième niveau ou d'un nom de domaine de troisième niveau, c'est une adresse URL. cette adresse URL, nous pouvons la manipuler pendant le traitement.
Ces tâches sont assez gênantes, mais il existe des experts sur Internet qui ont écrit un tel programme pour nous. Veuillez vous référer à l'article suivant :
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.htmlL'article
est terminé.
Dans le processus de mise en œuvre, vous rencontrerez certains problèmes, dont la plupart sont dus au fait de ne pas lire attentivement l'article ci-dessus, mais pour être honnête, il n'est pas facile de le lire. un long article. Permettez-moi d'enregistrer quelques questions importantes ci-dessous. Les deux dernières questions, Utiliser un code spécifique pour montrer comment gérer l'URL cible réécrite pour répondre à nos exigences.
Qu'est-ce que URLRewriter de Microsoft ? Où puis-je télécharger ce projet ?
Il s'agit d'un exemple de programme fourni dans un article sur msdn présentant URLRewriter. Il peut être téléchargé ici.
http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
Comment utiliser ces codes ?
Bien sûr, ce n’est pas un problème. Voici les choses à faire :
Téléchargez le code sur votre machine.
Après l'installation, ajoutez le projet URLRewriter à votre propre projet, suivez la méthode indiquée à l'adresse ci-dessus, modifiez la configuration du code web.config et commencez à l'utiliser.
Qu'est-ce que httpmodule ?
Pour comprendre simplement, il s'agit d'un programme qui traite les requêtes http. Pour une compréhension plus détaillée, veuillez vous référer à la documentation du SDK.
Comment mettre en œuvre la résolution panoramique ?
Tout d'abord, ajoutez un nom de domaine de deuxième niveau *.kerry.com au fournisseur de services de noms de domaine, pointant vers l'adresse IP de votre serveur.
Ensuite, créez un site dans IIS, laissez l'en-tête d'hôte de ce site vide et le port général est 80. Ce site est le site Web par défaut pour l'ensemble du port du serveur 80.
Ajoutez un mappage d'application générique à ce site (Propriétés du site IIS->Répertoire personnel->Configuration). Le but de ce mappage est de permettre à asp.net ISAPI de prendre en charge tout site de nom de domaine secondaire qui n'est pas spécifié dans IIS.
Que se passe-t-il lorsque vous saisissez un nom de domaine de deuxième niveau ?
Lorsqu'IIS détecte que l'URL entrante est un nom de domaine de deuxième niveau, il vérifiera d'abord s'il existe un site enregistré avec ce nom de domaine de deuxième niveau sur IIS. Si tel est le cas, il sera transféré vers ce site, sinon il sera transféré. au site par défaut, ce site par défaut est le site avec un en-tête d'hôte précédemment configuré qui est vide. Par conséquent, un port ne peut avoir qu'un seul site avec un en-tête d'hôte vide.
Nous avons mis en place asp.net ISAPI pour prendre en charge ces enfants sans abri. Écrivez un programme pour analyser l'URL entrante et effectuer une réécriture.
Pourquoi mon module http ne semble-t-il pas fonctionner ?
Après avoir défini un point d'arrêt dans le programme httpmodule, le processus ne démarre pas à partir de là. La raison est que vous n'avez pas enregistré votre programme httpmodule auprès du programme Web. fait dans web.config Terminé dans.
<système.web>
<Moduleshttp>
<add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
</httpModules>
</system.web>
Pourquoi suis-je toujours invité avec « Erreur RewriterConfig de la section de configuration inconnue » ?
C'est parce que vous n'avez pas enregistré votre section de configuration RewriterConfig avec le programme Web. Ce travail doit être effectué dans web.config.
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSerializerSectionHandler, URLRewriter" />
</configSections>
Vous pouvez ensuite configurer les règles à l'aide de la section RewriterConfig dans <configuration>.
Dans quelle partie du module http l'url est-elle traitée ?
L'essentiel du travail se situe dans la méthode URLRewriter ModuleRewriter().
si (re.IsMatch(requestedPath))
Évidemment, cela détermine si l'URL entrante est l'URL que nous voulons réécrire.
String sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, Rules[i].SendTo));
L'URL cible configurée dans web.config est reçue ici.
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
Réécrivez l'URL en interne.
Je ne veux pas coder en dur le nom de domaine de deuxième niveau dans web.config, et l'URL cible que je souhaite réécrire ne peut pas être codée en dur. Par exemple, si nous en avons un tel besoin.
La page de traitement réelle de blog.downcodes.com est kerry.com/action.aspx?id=1
La page de traitement réelle de call.kerryl.com est kerry.com/action.aspx?id=2
La page de traitement réelle de walkwith.kerry.com est kerry.com/walk.aspx
Comment y faire face ?
A ce stade, vous devez effectuer quelques manipulations dans les codes mentionnés ci-dessus.
si (re.IsMatch(requestedPath))
{
//Trouver le nom de domaine de deuxième niveau dans l'URL
string [] UserHost = app.Request.Url.Host.Split ( new Char [] { '.' } );
string domain2=UserHost [0];
//Définit l'URL cible à réécrire si nécessaire
chaîne sendToUrl ;
if(domain2==”Amour”)
sendToUrl =”/action.aspx?id=1”;
sinon if(domain2=="appel")
sendToUrl =”/action.aspx?id=2”;
sinon if(domain2=="walkwith")
sendToUrl = "/walk.aspx";
RewriterUtils.RewriteUrl (app.Context, sendToUrl);
}
Lors de la configuration des règles dans web.config, vous devez faire ceci
<Règle de réécriture>
<LookFor>http://(w+).kerry.com</LookFor>
<SendTo>/test.aspx</SendTo>
</RewriterRule>
(w+) est utilisé pour correspondre à n'importe quelle chaîne. Vous pouvez écrire n'importe quoi d'autre dans test.aspx ici, car nous ne l'utilisons pas du tout.
J'ai de nombreux sites avec des noms de domaine de deuxième niveau incertains, mais les pages de chaque site sont déterminées. Le contenu de chaque site de noms de domaine de deuxième niveau est en fait récupéré de la base de données en fonction de différents identifiants.
La situation est comme ça
http://localhost/kerry/action.aspx?id=1 blog.downcodes.com/walk.aspx
http://localhost/kerry/action.aspx?id=14 like.kerry.com/walk.aspx
Passer maintenant Lorsque je monte, le paramètre id ne peut pas être affiché et est remplacé par le nom de domaine de deuxième niveau. Que dois-je faire à ce moment-là
?
<Règle de réécriture>
<LookFor>http://(w+).kerry .com walk.aspx</LookFor>
<SendTo>/action.aspx</SendTo>
</RewriterRule>
Puis gérez-le comme ça dans le programme
//Obtenir le nom de domaine de deuxième niveau
string [] UserHost = app.Request.Url.Host.Split ( new Char [] { '.' } );
chaîne domaine2=UserHost [0] ;
Obtenez des numéros différents en fonction du nom de domaine
int id=getIDfromDomain(domain2);
//Récupère l'url de base à rediriger
string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, Rules[i].SendTo));
//Ajouter un paramètre d'identifiant
si (identifiant>0)
sendToUrl=string.Format ( "{0}?id={1}" , sendToUrl , id );
autre
sendToUrl=”erreur.aspx”;
//Récrire
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
J'ai cherché en ligne et il existe une autre solution...
Vous faites peut-être référence à cet article
http://blog.csdn.net/mengyao/archive/2007/01/25/ 1493537. .aspx
Comme vous pouvez le voir, les méthodes de base sont les mêmes. La raison pour laquelle cela n'est pas répertorié en haut est que cette approche est un peu délicate et peut ne pas être facile à comprendre au début. Mais je crois que les amis qui l'ont vu. à la fin La relecture de cet article vous fera probablement sourire en connaissance de cause
Bonne programmation
Dernier ps : j'avais prévu de publier cet article dans quelques jours, mais tout à l'heure, j'ai accidentellement supprimé tous les programmes que j'avais écrits ces derniers jours de VSS. C'était encore une fois un type complet, je méprise fortement cette poubelle. gestionnaire de code source créé par Microsoft-_ -