No he escrito un artículo técnico en mucho tiempo. Si no lo entiende, simplemente lea algunos artículos más o responda al final del artículo (esta es la forma más efectiva). Para ayudarlos a responder sus dudas,
vine aquí para buscar este artículo. Todos deben saber qué es un nombre de dominio de segundo nivel, así que no diré tonterías, pero antes de discutir, primero deben comprender una cuestión ideológica.
El problema que muchos amigos no han podido resolver (yo tampoco pude resolverlo hace unos días) es que después de escribir una dirección, ¿por qué se reescribe la URL?
Paso 1: escriba una dirección en el navegador, como http://blog.downcodes.com , y haga clic en Entrar. ¿Qué sucede?
Para simplificar el problema, déjame explicarlo así:
Paso 2: Primero, la dirección escrita se analiza y finalmente llega a un servidor web. Se entrega a IIS para su procesamiento. En el mundo .net, IIS entrega dicha solicitud a un procesador web para su procesamiento. El procesador web devuelve los resultados del procesamiento al navegador y los muestra al usuario.
No ignore este problema. Todo en el segundo paso se realiza en el lado del servidor. Cuando estas cosas suceden, la dirección en el navegador del cliente no cambiará incluso si el procesador web devuelve el resultado del procesamiento al final. , la dirección anterior no cambiará.
La URL que ingresa al principio solo actúa como un toque a la puerta. Una vez que se llama a la puerta, la función finaliza. Solo sus ojos pueden ver la dirección.
El problema que hay que entender es que la llamada reescritura de URL es sólo una historia interna conocida por los desarrolladores web. El usuario no tiene idea de lo que está pasando. Piensa que la dirección que escribe es el resultado que debería mostrarse. la pantalla. En otras palabras, controlamos lo que se muestra detrás de escena.
Lo siguiente a considerar es ¿cómo controlar el contenido mostrado?
Del proceso mencionado anteriormente, es obvio que es necesario manipular el trabajo del procesador web.
Una de las consideraciones más simples es que el usuario ingresa una dirección simple sin ningún parámetro, http://blog.downcodes.com y luego nosotros. cambie esta dirección a una dirección con parámetros que satisfaga las necesidades del programa, http://kerry.com?lover=notus , y finalmente procese.
En este paso se realiza la llamada reescritura de URL.
En términos de .net, necesitamos registrar un módulo http para que la aplicación maneje URL específicas.
Registre httpmodule en web.config,
es aproximadamente equivalente a este programa
en el programa httpmodule que proporcionamos
// Utilice nuestro programa httpmodule para interceptar la URL original
Cadena OriginalUrl=” http://blog.downcodes.com ”;
//Procesa la URL original y obtiene la última URL requerida, el valor es http://kerry.com?lover=notus
Cadena FinalUrl=Reescribir(OriginalUrl);
// el contexto reenvía la URL internamente a IIS para su procesamiento
context.RewritePath(FinalUrl);
A continuación, implementamos la reescritura de URL.
Paso 1: determine qué URL deben reescribirse, es decir, formule reglas de reescritura. Paso 2: escriba un controlador de módulo http Paso 3: integre el módulo http escrito en el programa web y comience a trabajar
. Y utilizando la reescritura de URL para implementar un nombre de dominio de segundo nivel, el proceso es el mismo, porque ya sea un nombre de dominio de segundo nivel o un nombre de dominio de tercer nivel, siempre que interceptemos. esta dirección URL, podemos manipularla durante el procesamiento.
Estas tareas son bastante problemáticas, pero hay expertos en Internet que han escrito un programa de este tipo para nosotros. Consulte el siguiente artículo:
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.htmlEl
artículo finalizó
En el proceso de implementación, encontrará algunos problemas, la mayoría de los cuales se deben a que no leyó el artículo anterior con atención, pero para ser honesto, no es fácil leerlo. Un artículo extenso. Permítanme registrar algunas preguntas importantes a continuación. Las dos últimas preguntas. Utilice código específico para mostrar cómo manejar la URL de destino reescrita para cumplir con nuestros requisitos.
¿Qué es URLRewriter de Microsoft? ¿Dónde puedo descargar este proyecto?
Este es un programa de muestra proporcionado en un artículo sobre msdn que presenta URLRewriter. Se puede descargar aquí.
http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
¿Cómo utilizar estos códigos?
Sin duda, no es una molestia. Estas son las cosas que debe hacer:
Descargue el código a su máquina.
Después de la instalación, agregue el proyecto URLRewriter a su propio proyecto, siga el método en la dirección proporcionada anteriormente, modifique la configuración del código web.config y comience a usarlo.
¿Qué es httpmodule?
Una comprensión simple es que es un programa que procesa solicitudes http. Para una comprensión más detallada, consulte la documentación del SDK.
¿Cómo implementar la resolución panorámica?
Primero, agregue un nombre de dominio de segundo nivel de *.kerry.com al proveedor de servicios de nombres de dominio, apuntando a la IP de su servidor.
Luego, cree un sitio en IIS, deje el encabezado del host de este sitio en blanco y el puerto general es 80. Este sitio es el sitio web predeterminado para todo el puerto 80 del servidor.
Agregue una asignación de aplicación comodín a este sitio (Propiedades del sitio IIS->Directorio principal->Configuración). El propósito de esta asignación es que asp.net ISAPI se haga cargo de cualquier sitio de nombre de dominio secundario que no esté especificado en IIS.
¿Qué sucede cuando ingresa un nombre de dominio de segundo nivel?
Cuando IIS detecta que la URL entrante es un nombre de dominio de segundo nivel, primero verificará si hay un sitio registrado con este nombre de dominio de segundo nivel en IIS. Si es así, se transferirá a este sitio; de lo contrario, se transferirá. al sitio predeterminado, este sitio predeterminado es el sitio con un encabezado de host previamente configurado que está vacío. Por lo tanto, un puerto solo puede tener un sitio con un encabezado de host vacío.
Hemos configurado asp.net ISAPI para hacerse cargo de estos niños sin hogar. Escriba un programa para analizar la URL entrante y realizar la reescritura.
¿Por qué mi httpmodule no parece funcionar?
Después de establecer un punto de interrupción en el programa httpmodule, pase lo que pase, el proceso no continúa desde aquí. La razón es que no ha registrado su programa httpmodule con el programa web. hecho en web.config Completado en.
<sistema.web>
<httpMódulos>
<añadir tipo="URLRewriter.ModuleRewriter, URLRewriter" nombre="ModuleRewriter" />
</httpModules>
</sistema.web>
¿Por qué siempre aparece el mensaje "Error de RewriterConfig en la sección de configuración desconocida"?
Esto se debe a que no ha registrado su sección de configuración de RewriterConfig en el programa web. Este trabajo debe completarse en web.config.
<secciones de configuración>
<sección nombre="RewriterConfig" tipo="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
Luego puede configurar las reglas usando la sección RewriterConfig en <configuración>.
¿En qué parte de httpmodule se procesa la URL?
La mayor parte del trabajo se realiza en el método URLRewriter.
si (re.IsMatch (ruta solicitada))
Obviamente, esto determina si la URL entrante es la URL que queremos reescribir.
Cadena sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, reglas[i].SendTo));
La URL de destino configurada en web.config se recibe aquí.
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
Vuelva a escribir la URL internamente.
No quiero codificar el nombre de dominio de segundo nivel en web.config y la URL de destino que quiero reescribir no se puede codificar, por ejemplo, si tenemos esa necesidad.
La página de procesamiento real de blog.downcodes.com es kerry.com/action.aspx?id=1
La página de procesamiento real de call.kerryl.com es kerry.com/action.aspx?id=2
La página de procesamiento real de walkwith.kerry.com es kerry.com/walk.aspx
¿Cómo afrontarlo?
En este momento, es necesario realizar algunas manipulaciones en los códigos mencionados anteriormente.
si (re.IsMatch (ruta solicitada))
{
//Busca el nombre de dominio de segundo nivel en la URL
cadena [] UserHost = app.Request.Url.Host.Split (nuevo Char [] { '.' });
string domain2=UserHost [0]
//Establece la URL de destino para que se reescriba según sea necesario
cadena enviarToUrl;
si(dominio2==”Amor”)
sendToUrl =”/action.aspx?id=1”;
de lo contrario si(dominio2==”llamar”)
sendToUrl =”/action.aspx?id=2”;
de lo contrario si (dominio2==”caminar con”)
sendToUrl =”/walk.aspx”;
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
}
Al configurar reglas en web.config, debe hacer esto
<Regla de reescritura>
<LookFor>http://(w+).kerry.com</LookFor>
<EnviarA>/test.aspx</EnviarA>
</RewriterRule>
(w+) se usa para hacer coincidir cualquier cadena. Puede escribir cualquier otra cosa en test.aspx aquí, porque no lo usamos en absoluto.
Tengo muchos sitios con nombres de dominio de segundo nivel inciertos, pero las páginas de cada sitio se determinan. El contenido de cada sitio de nombres de dominio de segundo nivel en realidad se recupera de la base de datos en función de diferentes ID.
La situación es así.
http://localhost/kerry/action.aspx?id=1 blog.downcodes.com/walk.aspx
http://localhost/kerry/action.aspx?id=14 like.kerry.com/walk.aspx
Pase ahora Cuando subo, el parámetro id no se puede mostrar y se cambia al nombre de dominio de segundo nivel. ¿Qué debo hacer en este momento
?
<Regla de reescritura>
<LookFor>http://(w+).kerry .com walk.aspx</LookFor>
<EnviarA>/acción.aspx</EnviarA>
</RewriterRule>
Luego manéjelo así en el programa.
//Obtener el nombre de dominio de segundo nivel
cadena [] UserHost = app.Request.Url.Host.Split (nuevo Char [] { '.' });
cadena dominio2=UserHost [0];
Obtenga diferentes números según el nombre de dominio
int id=getIDfromDomain(dominio2);
//Obtener la URL básica para ser redirigido
cadena sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, reglas[i].SendTo));
//Agregar parámetro de identificación
si(id>0)
sendToUrl=string.Format ( "{0}?id={1}" , sendToUrl , id );
demás
sendToUrl=”error.aspx”;
//Volver a escribir
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
busqué en línea y hay otra solución...
Quizás te estés refiriendo a este artículo
http://blog.csdn.net/mengyao/archive/2007/01/25/ 1493537 .aspx
Como puede ver, los métodos básicos son los mismos. La razón por la que esto no aparece en la parte superior es porque este enfoque es un poco complicado y puede que no sea fácil de entender al principio. Pero creo que los amigos que lo han visto. al final Leer este artículo nuevamente probablemente te hará sonreír con complicidad.
Feliz programación
PD final: Estaba planeando publicar este artículo en unos días, pero justo ahora, eliminé accidentalmente todos los programas que escribí en los últimos días de VSS. Todavía era un tipo completo. Una vez más, desprecio fuertemente esta basura. administrador de código fuente creado por Microsoft-_ -