오랫동안 기술적인 글을 쓰지 않았는데, 이해가 안 되시면 몇 가지 글을 더 읽어보시거나, 글의 마지막 부분에 답글을 달아주세요(이것이 가장 효과적인 방법입니다). 여러분의 의심에 대한 답변을 돕기 위해
이 기사를 찾으러 왔습니다. 2차 도메인 이름이 무엇인지 모두 알아야 하므로 말도 안 되는 이야기를 하지 않겠습니다. 하지만 논의하기 전에 먼저 이념적인 문제를 이해해야 합니다.
많은 친구들이 이해하지 못하는 문제(저도 며칠 전에는 이해하지 못했습니다)는 주소를 입력한 후 URL이 왜 다시 쓰여지는 걸까요?
1단계: 브라우저에 http://blog.downcodes.com 과 같은 주소를 입력하고 Enter를 클릭하세요.
문제를 단순화하기 위해 다음과 같이 설명하겠습니다.
2단계: 먼저 입력된 주소가 구문 분석되고 최종적으로 웹 서버로 전달되어 처리를 위해 IIS로 전달됩니다. .net 세계에서는 IIS가 처리를 위해 이러한 요청을 웹 프로세서에 전달합니다. 웹 프로세서는 처리 결과를 브라우저에 반환하고 이를 사용자에게 표시합니다.
이 문제를 무시하지 마십시오. 두 번째 단계의 모든 작업은 서버 측에서 수행됩니다. 이러한 작업이 진행되면 웹 처리기가 종료 시간에 처리 결과를 반환하더라도 클라이언트 브라우저의 주소는 변경되지 않습니다. , 위 주소는 변경되지 않습니다.
처음에 입력한 URL은 문을 두드리는 역할만 하며, 일단 문을 두드리면 해당 주소는 눈으로만 볼 수 있습니다.
이해해야 할 문제는 소위 URL 재작성은 웹 개발자에게 알려진 내부 이야기일 뿐이라는 것입니다. 사용자는 자신이 입력한 주소가 표시되어야 하는 결과라고 생각합니다. 즉, 화면 뒤에 표시되는 내용을 제어합니다.
다음으로 고려해야 할 사항은 표시되는 콘텐츠를 제어하는 방법입니다.
위에서 언급한 프로세스에서 웹 프로세서의 작업을 조작해야 한다는 것은 명백합니다.
가장 간단한 고려 사항 중 하나는 사용자가 매개변수 없이 간단한 주소인 http://blog.downcodes.com 을 입력한 다음 우리가 사용한다는 것입니다. 이 주소를 프로그램의 요구사항인 http://kerry.com?lover=notus 에 맞는 매개변수를 가진 주소로 변경하고 최종적으로 처리합니다.
소위 URL 재작성이 이 단계에 있습니다.
.net 용어로 특정 URL을 처리하려면 애플리케이션에 대한 http모듈을 등록해야 합니다.
web.config에 httpmodule을 등록하고,
우리가 제공하는 httpmodule 프로그램의
이 프로그램과 대략 동일합니다
.// 원래 URL을 가로채려면 httpmodule 프로그램을 사용하세요.
문자열 OriginalUrl=” http://blog.downcodes.com ”;
//원본 URL을 처리하고 마지막으로 필요한 URL을 가져옵니다. 값은 http://kerry.com?lover=notus 입니다.
String FinalUrl=Rewrite(OriginalUrl);
// 컨텍스트는 처리를 위해 내부적으로 URL을 IIS로 다시 보냅니다.
context.RewritePath(FinalUrl);
다음으로 URL 재작성을 구현합니다.
1단계: 재작성해야 할 URL 결정, 즉 재작성 규칙 작성 2단계: httpmodule 핸들러 작성 3단계: 작성된 httpmodule을 웹 프로그램에 통합하고 작업을 시작합니다
. . URL 재작성을 사용하여 2차 도메인 이름을 구현하는 과정은 동일합니다. 왜냐하면 2차 도메인 이름이든 3차 도메인 이름이든 가로채기만 하면 되기 때문입니다. 이 URL 주소를 처리하는 동안 조작할 수 있습니다.
이러한 작업은 매우 번거로운 일이지만, 우리를 위해 이러한 프로그램을 작성한 인터넷 전문가가 있습니다.
을 참조하십시오.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.html
이 기사는 끝났습니다.
구현 과정에서 몇 가지 문제에 직면하게 될 것입니다. 대부분은 위의 기사를 주의 깊게 읽지 않아서 발생하지만 솔직히 말해서 읽기가 쉽지 않습니다. 아래에 몇 가지 중요한 질문을 기록하겠습니다. 특정 코드를 사용하여 요구 사항을 충족하도록 다시 작성된 대상 URL을 처리하는 방법을 보여줍니다.
Microsoft의 URLRewriter는 무엇입니까? 이 프로젝트는 어디에서 다운로드할 수 있습니까?
이것은 URLRewriter를 소개하는 msdn 기사에 제공된 샘플 프로그램입니다. 여기에서 다운로드할 수 있습니다.
http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
이 코드를 사용하는 방법이 번거롭나요?
확실히 해야 할 일은 다음과 같습니다.
코드를 컴퓨터에 다운로드하세요.
설치 후 자신의 프로젝트에 URLRewriter 프로젝트를 추가하고 위에 제공된 주소의 방법에 따라 코드 구성 web.config를 수정하고 사용을 시작합니다.
httpmodule이란 무엇입니까?
간단히 이해하면 http 요청을 처리하는 프로그램입니다. 자세한 내용은 SDK 설명서를 참조하세요.
팬 해상도를 구현하는 방법
먼저 도메인 이름 서비스 공급자에 *.kerry.com이라는 두 번째 수준 도메인 이름을 추가하여 서버 IP를 가리킵니다.
그런 다음 IIS에서 사이트를 만들고 이 사이트의 호스트 헤더를 비워 두고 일반 포트는 80입니다. 이 사이트는 전체 서버 포트 80에 대한 기본 웹 사이트입니다.
이 사이트에 와일드카드 응용 프로그램 매핑을 추가합니다(IIS 사이트 속성->홈 디렉터리->구성). 이 매핑의 목적은 asp.net ISAPI가 IIS에 지정되지 않은 모든 보조 도메인 이름 사이트를 인수하도록 하는 것입니다.
2단계 도메인 이름을 입력하면 어떻게 되나요?
IIS는 수신 URL이 2차 도메인 이름임을 감지하면 먼저 IIS에 이 2차 도메인 이름으로 등록된 사이트가 있는지 확인하고, 존재하지 않으면 이 사이트로 이전합니다. 기본 사이트의 경우 이 기본 사이트는 이전에 구성된 비어 있는 호스트 헤더가 있는 사이트입니다. 따라서 포트에는 빈 호스트 헤더가 있는 사이트가 하나만 있을 수 있습니다.
우리는 이러한 노숙자 아이들을 인계받기 위해 asp.net ISAPI를 설정했습니다. 들어오는 URL을 분석하고 재작성을 수행하는 프로그램을 작성하십시오.
내 httpmodule이 작동하지 않는 것 같나요?
httpmodule 프로그램에 중단점을 설정한 후에도 프로세스가 여기에서 진행되지 않습니다. 그 이유는 httpmodule 프로그램을 웹 프로그램에 등록하지 않았기 때문입니다. web.config에서 완료되었습니다.
<시스템.웹>
<http모듈>
<추가 유형="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
</http모듈>
</system.web>
항상 "알 수 없는 구성 섹션 RewriterConfig 오류" 메시지가 표시되는
이유는 웹 프로그램에 RewriterConfig 구성 섹션을 등록하지 않았기 때문입니다. 이 작업은 web.config에서 완료해야 합니다.
<config섹션>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
그런 다음 <configuration>의 RewriterConfig 섹션을 사용하여 규칙을 구성할 수 있습니다.
URL은 httpmodule의 어느 부분에서 처리되나요?
대부분의 작업은 URLRewriter.Rewrite() 메서드에서 이루어집니다.
if (re.IsMatch(요청된 경로))
분명히 이것은 들어오는 URL이 우리가 다시 작성하려는 URL인지 여부를 결정합니다.
String sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rule[i].SendTo));
web.config에 구성된 대상 URL이 여기에서 수신됩니다.
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
내부적으로 URL을 다시 작성하십시오.
web.config에 두 번째 수준 도메인 이름을 하드 코딩하고 싶지 않으며 다시 작성하려는 대상 URL을 하드 코딩할 수 없습니다.
blog.downcodes.com의 실제 처리 페이지는 kerry.com/action.aspx?id=1입니다.
call.kerryl.com의 실제 처리 페이지는 kerry.com/action.aspx?id=2입니다.
walkwith.kerry.com의 실제 처리 페이지는 kerry.com/walk.aspx입니다.
그것을 처리하는 방법?
이때 위에서 언급한 코드 중 일부를 조작해야 합니다.
if (re.IsMatch(요청된 경로))
{
//URL에서 두 번째 수준 도메인 이름을 찾습니다.
string [] UserHost = app.Request.Url.Host.Split ( new Char [] { '.' } );
string domain2=UserHost [0];
//필요에 따라 다시 작성할 대상 URL을 설정합니다.
문자열 sendToUrl;
if(domain2==”사랑”)
sendToUrl =”/action.aspx?id=1”;
else if(domain2==” 호출”)
sendToUrl =”/action.aspx?id=2”;
else if(domain2==”walkwith”)
sendToUrl =”/walk.aspx”;
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
}
web.config에서 규칙을 구성할 때 다음을 수행해야 합니다.
<리라이터규칙>
<찾아보기>http://(w+).kerry.com</찾아보기>
<SendTo>/test.aspx</SendTo>
</RewriterRule>
(w+)는 문자열을 일치시키는 데 사용됩니다. 여기서는 test.aspx를 전혀 사용하지 않으므로 다른 내용을 작성할 수 있습니다.
2차 도메인 이름이 불확실한 사이트가 많지만 각 사이트의 페이지는 실제로 서로 다른 ID를 기반으로 데이터베이스에서 검색됩니다.
상황은 이렇습니다
http://localhost/kerry/action.aspx?id=1 blog.downcodes.com/walk.aspx
http://localhost/kerry/action.aspx?id=14 like.kerry.com/walk.aspx
지금 통과 올라가면 id 매개변수가 표시되지 않고 2차 도메인 이름으로 변경됩니다. 이때
먼저 규칙을 구성해야 합니다.
<리라이터규칙>
<LookFor>http://(w+).kerry .com walk.aspx</LookFor>
<SendTo>/action.aspx</SendTo>
</RewriterRule>
그런 다음 프로그램에서 다음과 같이 처리하십시오.
//두 번째 수준 도메인 이름을 가져옵니다.
string [] UserHost = app.Request.Url.Host.Split ( new Char [] { '.' } );
문자열 domain2=UserHost [0];
도메인 이름에 따라 다른 번호 받기
int id=getIDfromDomain(domain2);
//리디렉션할 기본 URL을 가져옵니다.
string sendToUrl = RewriterUtils.ResolveUrl(app.Context.Request.ApplicationPath, re.Replace(requestedPath, rule[i].SendTo));
//id 매개변수 추가
if(id>0)
sendToUrl=string.Format ( "{0}?id={1}" , sendToUrl , id );
또 다른
sendToUrl="error.aspx";
//고쳐 쓰기
RewriterUtils.RewriteUrl(app.Context, sendToUrl);
온라인에서 검색했는데 다른 해결 방법이 있습니다...
아마도 이 문서를 참조하고 계신 것 같습니다
.http://blog.csdn.net/mengyao/archive/2007/01/25/ 1493537 .aspx
보시다시피 기본적인 방법은 동일합니다. 이것이 상단에 나열되지 않은 이유는 이 접근 방식이 처음에는 다소 까다롭고 이해하기 쉽지 않을 수 있기 때문입니다. 이 글을 다시 읽으면 아마 당신도 나도 모르게 미소를 지을 것입니다.
행복한 프로그래밍
최종 ps: 이 글은 며칠 내로 게시할 예정이었는데, 지난 며칠 동안 작성한 프로그램을 모두 실수로 VSS에서 모두 삭제했습니다. 다시 한번 이 쓰레기를 강력하게 경멸합니다. Microsoft에서 만든 소스 코드 관리자-_ -