Faz muito tempo que não escrevo um artigo técnico. Se você não entende, basta ler mais alguns artigos ou responder no final do artigo (esta é a forma mais eficaz). para ajudá-lo a tirar suas dúvidas.
Vim aqui para encontrar este artigo, todos vocês devem saber o que é um nome de domínio de segundo nível, então não vou falar bobagens.
O problema que muitos amigos não conseguiram descobrir (eu também não consegui descobrir há alguns dias) é que depois de digitar um endereço, por que o URL é reescrito?
Passo 1: Digite um endereço no navegador, como http://blog.downcodes.com e clique em Enter.
Para simplificar o problema, deixe-me explicá-lo assim:
Etapa 2: Primeiro, o endereço digitado é analisado e finalmente chega a um servidor web. Ele é entregue ao IIS para processamento. Finalmente, o IIS entregará essa solicitação a um processador web para processamento. O processador web retorna os resultados do processamento ao navegador e os exibe ao usuário.
Por favor, não ignore este problema. Tudo na segunda etapa é feito no lado do servidor. Quando essas coisas acontecem, o endereço no navegador do cliente não muda. , o endereço acima não será alterado.
O URL que você digita no início funciona apenas como uma batida na porta. Depois que a porta é batida, apenas seus olhos podem ver o endereço.
O problema que precisa ser entendido é que a chamada reescrita de URL é apenas uma história interna conhecida pelos desenvolvedores web. O usuário não tem ideia do que está acontecendo. a tela. Em outras palavras, controlamos o que é exibido nos bastidores.
A próxima coisa a considerar é como controlar o conteúdo exibido?
Pelo processo mencionado acima, é óbvio que o trabalho do processador web precisa ser manipulado.
Uma das considerações mais simples é que o usuário insira um endereço simples sem nenhum parâmetro, http://blog.downcodes.com e depois Nós. altere este endereço para um endereço com parâmetros que atenda às necessidades do programa, http://kerry.com?lover=notus e, finalmente, processe-o.
A chamada reescrita de URL está nesta etapa.
Em termos .net, precisamos registrar um módulo http para que o aplicativo lide com URLs específicos
Registre httpmodule em web.config,
é aproximadamente equivalente a este programa
no programa httpmodule que fornecemos
// Use nosso programa httpmodule para interceptar o URL original
String OriginalUrl =” http://blog.downcodes.com ”;
//Processa a url original e obtém a última url necessária, o valor é http://kerry.com?lover=notus
String FinalUrl=Reescrever(OriginalUrl);
// contexto reenvia a URL internamente para o IIS para processamento
context.RewritePath(FinalUrl);
Em seguida, implementamos a reescrita de URL.
Etapa 1: Determine quais URLs precisam ser reescritas, ou seja, formule regras de reescrita Etapa 2: Escreva um manipulador httpmodule Etapa 3: Integre o módulo http escrito ao programa da web e comece a trabalhar
. ., e usando a reescrita de URL para implementar um nome de domínio de segundo nível, o processo é o mesmo porque, seja um nome de domínio de segundo nível ou um nome de domínio de terceiro nível, é um endereço URL. este endereço URL, podemos manipulá-lo durante o processamento.
Essas tarefas são bastante problemáticas, mas existem especialistas na Internet que escreveram esse programa para nós
. 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.htmlO
artigo acabou.
No processo de implementação Você encontrará alguns problemas, muitos dos quais são causados por não ler o artigo acima com atenção, mas para ser honesto, não é fácil lê-los. um longo artigo. Deixe-me registrar algumas questões importantes abaixo. As duas últimas perguntas: Use um código específico para mostrar como lidar com o URL de destino reescrito para atender aos nossos requisitos.
O que é o URLRewriter da Microsoft. Onde posso baixar este projeto?
Este é um programa de exemplo fornecido em um artigo no msdn apresentando o URLRewriter. Ele pode ser baixado aqui.
http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
Como usar esses códigos?
Para ter certeza, não é um incômodo.
Baixe o código para sua máquina.
Após a instalação, adicione o projeto URLRewriter ao seu próprio projeto, siga o método no endereço fornecido acima, modifique a configuração do código web.config e comece a utilizá-lo.
O que é httpmodule?
Um entendimento simples é que é um programa que processa solicitações http. Para uma compreensão mais detalhada, consulte a documentação do SDK.
Como implementar a resolução pan?
Primeiro, adicione um nome de domínio de segundo nível *.kerry.com ao provedor de serviços de nome de domínio, apontando para o IP do seu servidor.
Em seguida, crie um site no IIS, deixe o cabeçalho do host deste site em branco e a porta geral é 80. Este site é o site padrão para toda a porta 80 do servidor.
Adicione um mapeamento de aplicativo curinga a este site (Propriedades do site do IIS-> Diretório inicial-> Configuração). O objetivo desse mapeamento é fazer com que o ISAPI do asp.net assuma o controle de qualquer site de nome de domínio secundário que não esteja especificado no IIS.
O que acontece quando você insere um nome de domínio de segundo nível?
Quando o IIS detecta que o URL de entrada é um nome de domínio de segundo nível, ele primeiro verifica se existe um site registrado com esse nome de domínio de segundo nível no IIS. Em caso afirmativo, ele será transferido para este site, caso contrário, será transferido. para o Site padrão, este site padrão é o site com um cabeçalho de host previamente configurado que está vazio. Portanto, uma porta pode ter apenas um site com um cabeçalho de host vazio.
Configuramos o asp.net ISAPI para controlar essas crianças sem-teto. Escreva um programa para analisar o URL recebido e reescrever.
Por que meu httpmodule parece não funcionar?
Depois de definir um ponto de interrupção no programa httpmodule, não importa o que aconteça, o processo não sai daqui. O motivo é que você não registrou seu programa httpmodule com o programa web. feito em web.config Concluído em.
<sistema.web>
<httpMódulos>
<add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
</httpMódulos>
</system.web>
Por que sempre recebo a mensagem "Erro RewriterConfig da seção de configuração desconhecida"?
Isso ocorre porque você não registrou sua seção de configuração RewriterConfig com o programa da web.
<seções de configuração>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
Você pode então configurar as regras usando a seção RewriterConfig em <configuração>.
Em qual parte do httpmodule o URL é processado?
A maior parte do trabalho está no método URLRewriter.
if (re.IsMatch(requestedPath))
Obviamente, isso determina se o URL recebido é o URL que queremos reescrever.
String sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, regras[i].SendTo));
A URL de destino configurada em web.config é recebida aqui.
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
Reescreva o URL internamente.
Não quero codificar o nome de domínio de segundo nível em web.config, e o URL de destino que desejo reescrever não pode ser codificado, por exemplo, se tivermos essa necessidade.
A página de processamento real de blog.downcodes.com é kerry.com/action.aspx?id=1
A página de processamento real de call.kerryl.com é kerry.com/action.aspx?id=2
A página de processamento real de walkwith.kerry.com é kerry.com/walk.aspx
Como lidar com isso?
Neste momento, você precisa fazer algumas manipulações nos códigos mencionados acima.
if (re.IsMatch(requestedPath))
{
//Encontre o nome de domínio de segundo nível no URL
string [] UserHost = app.Request.Url.Host.Split (new Char [] { '.' } );
string domain2=UserHost [0];
//Defina o URL de destino a ser reescrito conforme necessário
string sendToUrl;
if(domínio2==”Amor”)
sendToUrl =”/action.aspx?id=1”;
senão if(domínio2==”chamada”)
sendToUrl =”/action.aspx?id=2”;
senão if(domínio2==”walkwith”)
sendToUrl =”/walk.aspx”
;
}
Ao configurar regras no web.config, você precisa fazer isso
<ReescritorRegra>
<LookFor>http://(w+).kerry.com</LookFor>
<SendTo>/test.aspx</SendTo>
</RewriterRule>
(w+) é usado para corresponder a qualquer string. Você pode escrever qualquer outra coisa em test.aspx aqui, porque não usamos nada.
Tenho muitos sites com nomes de domínio de segundo nível incertos, mas as páginas de cada site são determinadas. O conteúdo de cada site de nome de domínio de segundo nível é, na verdade, recuperado do banco de dados com base em IDs diferentes.
A situação é assim
http://localhost/kerry/action.aspx?id=1 blog.downcodes.com/walk.aspx
http://localhost/kerry/action.aspx?id=14 like.kerry.com/walk.aspx
Passe agora Quando subo, o parâmetro id não pode ser exibido e é alterado para o nome de domínio de segundo nível. O que devo fazer neste momento
?
<ReescritorRegra>
<LookFor>http://(w+).kerry .com walk.aspx</LookFor>
<SendTo>/action.aspx</SendTo>
</RewriterRule>
Então lide assim no programa
//Obtém o nome de domínio de segundo nível
string [] UserHost = app.Request.Url.Host.Split (new Char [] { '.' } );
string domínio2=UserHost [0];
Obtenha números diferentes com base no nome de domínio
int id=getIDfromDomain(domínio2);
//Obtém a URL básica a ser redirecionada
string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, regras[i].SendTo));
//Adiciona parâmetro de id
se(id>0)
sendToUrl=string.Format ( "{0}?id={1}" , sendToUrl , id );
outro
sendToUrl=”erro.aspx”;
//Reescrever
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
Pesquisei online e há outra solução...
Talvez você esteja se referindo a este artigo
http://blog.csdn.net/mengyao/archive/2007/01/25/ 1493537 .aspx
Como você pode ver, os métodos básicos são os mesmos. A razão pela qual isso não está listado no topo é porque essa abordagem é um pouco complicada e pode não ser fácil de entender no início. no final Ler este artigo novamente provavelmente fará você sorrir conscientemente
Boa programação
Ps final: Eu estava planejando publicar este artigo em alguns dias, mas agora mesmo, apaguei acidentalmente todos os programas que escrevi nos últimos dias do VSS. Mais uma vez, desprezo fortemente esse lixo. gerenciador de código fonte feito pela Microsoft-_ -