인터넷에서 많은 친구들이 asp.net에서 urlrewrite를 수행하고 HttpHandle+Server.Transfer 메서드를 사용하는 것을 보았습니다. 사실 이 방법은 잘못된 것입니다. 첫째, HttpHandle은 urlrewrite를 구현할 수 없습니다. 둘째, Server.Transfer는 urlrewrite가 아닌 표준 리디렉션입니다.
실제로 urlrewrite를 구현하기 위해 자체 HttpHandle 또는 HttpModule을 구현할 필요는 없습니다. 몇 줄의 코드로 쉽게 구현할 수 있습니다.
여기서 소개하는 내용은 가상호스트에 관한 내용입니다. 가상호스트는 자신의 서버와 다릅니다. iis를 수정할 수 있는 권한도 없고, iis rewrite 같은 iis 플러그인을 설치할 수 있는 권한도 없습니다. 하지만 여전히 필요한 기능을 쉽게 완료할 수 있습니다.
구체적인 방법은 다음과 같습니다. global.asax.cs를 열고 protected void Application_BeginRequest(Object sender, EventArgs e)를 찾습니다. 메소드 이름을 보면 무슨 일을 하는지 짐작할 수 있을 것 같습니다. 다음 코드를 입력하세요:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
string oldUrl = HttpContext.Current.Request.RawUrl;
문자열 패턴 = @"^(.+)default/(d+).aspx(?.*)*$";
문자열 대체 = "$1default.aspx?id=$2";
if(Regex.IsMatch(oldUrl, 패턴, RegexOptions.IgnoreCase | RegexOptions.Compiled))
{
string newUrl = Regex.Replace(oldUrl, 패턴, 교체, RegexOptions.Compiled | RegexOptions.IgnoreCase);
this.Context.RewritePath(newUrl);
}
}
위 코드를 사용하면 .../default/123.aspx와 유사한 URL에 액세스합니다. 물론 이 URL은 내 컴퓨터에 존재하지 않으므로 .../default.aspx? =123.
물론 강력한 정규식을 사용하면 필요에 따라 URL을 다시 작성할 수 있습니다. 이 모든 작업은 서버 측에서 자동으로 수행되며 클라이언트는 이를 인식하지 못합니다. 가상 호스트에 있으므로 .aspx 파일만 리디렉션할 수 있습니다. 자체 서버인 경우 iis에 접미사를 등록하기만 하면 모든 접미사를 처리할 수 있습니다. 예를 들어 *.myweb과 같은 유형을 등록하면 다른 사람이 default/456.myweb을 방문할 때 이를 default.aspx?id=456으로 리디렉션할 수 있습니다. 한마디로, 생각할 수 있는 한 .net은 이를 실현하는 데 도움이 될 수 있으며 이 모든 것에는 많은 코드가 필요하지 않습니다.