답변
이 솔루션은 꽤 강렬하지만, 그럼에도 불구하고 유효한 하나 .
몇 년 전 (우리가 강력히 권장하는 ASP.NET MVC로 이동하기 전에) 우리는 같은 일을했습니다.
먼저 새 ASP.NET 모듈을 만들고 IIS 또는 Web.config에 등록했습니다. 이 모듈은 수신 클라이언트의 요청을 수신합니다.
우리는HttpModule
우리 자신을 구축하고 우리가 귀하의 경우
http://www.example.com/Men/
에, 우리의 유효한 경로를 정의
구성 파일, 함께 작업했다.
그러면 관리자의 목록을 갖게됩니다. 이 관리자은 파이프 라인으로 작동합니다. 각 관리자는 이전 관리자의 출력을 수신합니다.
이 방법에 따라, 우리의 첫 매니저는 우리의 영문을 URL을 사용하여 계속할 수 들어오는 요청의 URL의 재 작성, 그래서 미래의 관리자 (레거시 사람을) 처리 우리 RewriteManager
했다. 당신이 볼 수 있듯이, 우리는 정규 표현식 우리의 경로를 정의하고, 라는 이름의 그룹을 사용하여 필요한 정보를 채취
<configuration name="note"
mode="1"
urlPattern="^https?://(([a-z0-9\-]*\.)?localhost(:[0-9]+)?/((?'note_id'[0-9]+)-?(?'title'.*))$"
rewriteUrl="/note.aspx?note_id={note_id}&site={ContextInfo.site}">
<manager type="LaNacion.Framework.Web.Managers.RewriteManager, LaNacion.Framework.Web.Managers"/>
<!-- THESE MANAGERS NEED THE ASPX URL, THEY ARE LEGACY MANAGERS -->
<manager type="LaNacion.Framework.Web.Managers.FileCacheManager, LaNacion.Framework.Web.Managers"/>
<manager type="LaNacion.Hola.Web.Managers.NotaManager, LaNacion.Hola.Web.Managers"/>
<manager type="LaNacion.Framework.Web.Managers.OutputImageCacheManager, LaNacion.Framework.Web.Managers"/>
</configuration>
: 여기
우리의 모듈의 구성 파일에있는 우리의 경로 중 하나의 예입니다 정규식에. 우리는 나중에 수집 한 정보를 사용하여 기존 URL을 구축합니다.당신이 경우, urlPattern
속성과 같습니다
https?://(([a-z0-9\-]*\.)?localhost(:[0-9]+)?/(?'entity'[a-zA-Z]+)
그리고 rewriteUrl
속성은 수 wourld :
/Category.aspx?cid=c001&cname={entity}
을 우리는의 RewritePath
방법을 사용하여 URL의 재 작성을 HttpContext
인스턴스 :
System.Web.HttpContext.Current.RewritePath(newUrl);
향후 관리자는 쿼리 매개 변수를 추출하여 이전처럼 수행 할 수 있으므로 레거시 관리자는 이전과 동일한 방식으로 작동합니다.
나는 나 자신을 충분히 분명하게 만들었고 이것은 당신을 도왔습니다.
@ Mati-Cicero에서 설명한 솔루션은 이미 재 작성 규칙을 알고있는 경우 잘 작동합니다. 이 방법으로 가고 싶다면 http://weblogs.asp.net/scottgu/tip-trick-url-rewriting-with-asp-net (오래되었지만 좋은 기사)에서 기사를 제안 할 수도 있습니다.
하지만 당신은 데이터베이스에 저장된 URL로 재 작성하려는 경우, 이것이 내가 제안 것입니다 :
public class DBRewriteModule : IHttpModule
{
public DBRewriteModule()
{
}
public void Init(HttpApplication context)
{
context.AuthorizeRequest += new EventHandler(context_AuthorizeRequest);
}
void context_AuthorizeRequest(object sender, EventArgs e)
{
Rewriter rw = new Rewriter();
rw.Process();
}
}
이처럼 web.config
파일에 추가 :
이 HttpModule을 이런 식으로 작성
<system.webServer> <validation validateIntegratedModeConfiguration="false" /> <modules runAllManagedModulesForAllRequests="true"> <add name="DBRewrite" type="smartdev.web.Modules.DBRewriteModule" /> </modules> </system.webServer>
그리고 당신의 라이터 CS에서 는 시간해야 파일 같은 비슷한 :
public class Rewriter
{
public Rewriter()
{
}
public bool Process()
{
// get path from database based on your original path:
// use HttpContext.Current.Request.Path and HttpContext.Current.Request.QueryString
string substPath = "...your db logic here ...";
HttpContext.Current.RewritePath(substPath);
}
}
- 1. 301 asp.net의 데이터베이스에서 동적 URL 리디렉션
- 2. 동적 데이터로 색상을 매핑하는 방법
- 3. URL 양식을 매핑하는 방법 ServletAction 클래스
- 4. ASP.Net의 짧은 URL 개념은 무엇입니까
- 5. asp.net의 사용자 지정 URL 라우팅
- 6. asp.net의 URL 암호화
- 7. asp.net의 URL 매핑
- 8. ASP.net의 허영 프로필 URL
- 9. asp.net의 URL 디코딩
- 10. asp.net의 URL 변경
- 11. asp.Net의 URL 마스킹
- 12. ASP.NET의 URL 비교
- 13. Asp.NET의 url 응답 값을 얻는 방법
- 14. asp.net의 동적 컨테이너 크기
- 15. asp.net의 동적 가장
- 16. asp.net의 동적 컨트롤
- 17. ASP.Net의 동적 컨텐츠 옵션
- 18. ASP.NET의 동적 데이터베이스 전환
- 19. asp.net의 동적 확인 상자
- 20. Asp.Net의 동적 테이블
- 21. ASP.NET의 동적 양식 생성
- 22. ASP.NET의 동적 호스트 이름
- 23. Asp.Net의 동적 메뉴 격자
- 24. asp.net의 동적 컨트롤
- 25. asp.net의 동적 테마
- 26. 우리의 응용 프로그램을 asp.net의 최신 버전 DLL에 매핑하는 방법
- 27. 프로그래밍 방식으로 ASP.NEt의 Label 컨트롤에 dropdownList 컨트롤을 매핑하는 방법 C#
- 28. ASP.net의 동적 경고 상자 C#
- 29. 방법 : PHP 동적 URL 확인
- 30. 동적 프로필 번호를 서블릿에 매핑하는 방법은 무엇입니까?
당신은 ASP.NET MVC 프레임 워크로 이동하는 것을 고려 했습니까? –
NO. asp.net 3.5 프레임 워크를 사용하고 있습니다. – Boktiar