IHttpModule을 작성하여 세부 정보 페이지에 대한 친숙한 URL 액세스를 허용합니다. 사용자가 http://xyx.com/hotels/123/hotel-name.aspx 페이지를 사용하여 세부 정보 페이지에 액세스하려고하면 IHttpModule의 OnBeginRequest 메서드에 다시 쓰기 규칙이 적용됩니다.원본 URL에 쿼리 문자열이 포함되어 있으면 ASP.Net Context.RewritePath가 작동하지 않습니다.
여기에서 Context.RewritePath ("~/DetailPages/DetailPage.aspx", "", "Code = 123")를 사용하여 경로를 "~/DetailPages/DetailPage.aspx"로 변경하려고했습니다. 원본 URL에서 가져온 것입니다.
원래 URL에 쿼리 문자열이 없으면 세부 정보 페이지가 호출됩니다. 그러나 사용자가 http://xyz.com/hotels/123/hotel-name.aspx?show=advance에 액세스하려고하면 코드를 다시 쓰면 Context.RewritePath("~/DetailPages/DetailPage.aspx", "", "Code=123&show=advance")
으로 실행됩니다. 여기에 "/hotels/123/hotel-name.aspx"페이지가 존재하지 않는다는 오류가 표시됩니다.
전에 & "Context.RewritePath
"메서드를 호출 한 후 아래 주어진 Context.Request
개체에 대한 세부 정보를 가져 왔습니다. 원래 URL에 검색어 문자열이 없으면 둘 다 완벽하게 보입니다. 그러나 원본 URL에 쿼리 문자열이 포함되어있는 경우 Server.GetLastError()
에 "/hotels/123/hotel-name.aspx"페이지가 표시되면 "Context_Error"내부 (이 요청 실행에 대한 오류를 수신하는 이벤트) 메서드가 있습니다.
Context.Request
개체의 추적 세부 정보는 아래를 참조하십시오. 어떤 긍정적 인 결과없이 이미 8 시간을 보냈으므로 도움/의견을 환영합니다.
--------------------------- 이전 - RewritePath 호출 ------------ ---------------
RawUrl : - /Hotels/123/hotel-name.aspx?a=b
AppRelativeCurrentExecutionFilePath : - ~/호텔/123/호텔 - name.aspx
CurrentExecutionFilePath : - /Hotels/123/hotel-name.aspx
에 Params : - A = B & __utma = 221736730.1213284380.1356606190.1356674469.1356687004.4 ..... (윈도우 + NT + 5.1 % 3B + 캠핑카 %의 3a7.0.1) + 게코 % 2f20100101 + 파이어 폭스 % 2f7.0.1
경로 : -/호텔/123/호텔 - name.aspx
PhysicalPath 인자 : - D : \ AppRoot \ 호텔 \ 161 \ 호텔 - name.aspx
URL : - http://xyz.com/Hotels/123/hotel-name.aspx?a=b
----------- ---------------- - RewritePath 호출 후 ---------------------------
RawUrl : - /Hotels/123/hotel-name.aspx?a=b
AppRelativeCurrentExecutionFilePath : - ~/DetailPages/DetailPage.aspx
CurrentExecutionFilePath : - /DetailPages/DetailPage.aspx
에 Params : - 코드 = 123 & A = B & __utma = 221736730.1213284380.1356606190.1356674469.1356687004.4 ..... (윈도우 + NT + 5.1 %의 3B + 캠핑카 %의 3a7.0.1) + 게코 % 2f20100101 + 파이어 폭스 %의 2f7.0 .1
경로 : - /DetailPages/DetailPage.aspx
PhysicalPath 인자 : - D : \ AppRoot \ DetailPages \ DetailPage.aspx
URL : - http://xyz.com/DetailPages/DetailPage.aspx?Code=123&a=b
--- Server.GetLastError
- 추적 - 내부 IHttpModule의 오류 Event--
RawUrl : - /Hotels/123/hotel-name.aspx?a=b
AppRelativeCurrentExecutionFilePath : - ~/호텔/123/호텔 - name.aspx
CurrentExecutionFilePath : - /Hotels/123/hotel-name.aspx
에 Params : - A = B & __utma = 221736730.1213284380.1356606190.1356674469. 1356687004.4 .... (윈도우 + NT + 5.1 %의 3B + 캠핑카 %의 3a7.0.1) + 게코 % 2f20100101 + 파이어 폭스 % 2f7.0.1
경로 : - /Hotels/123/hotel-name.aspx
PhysicalPath : - D : \ AppRoot \ Hotels \ 161 \ hotel-name.aspx
URL : - http://xyz.com/Hotels/123/hotel-name.aspx?a=b
오류 메시지 '/Hotels/123/hotel-name.aspx은'존재하지 않는 파일.
스택 추적
at System.Web.UI.Util.CheckVirtualFileExists(VirtualPath virtualPath)
at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean noAssert)
at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp, Boolean noAssert)
at System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
at System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2.GetHandler(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
at System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig)
at System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
사람이 문제가 될 수있는 것을 알 수 있습니까?
미리 감사드립니다.
왜 Microsoft에서 제공하는 다시 쓰기 모듈을 사용하지 않습니까? http://www.iis.net/learn/extensions/url-rewrite-module/using-the-url-rewrite-module – iamkrillin
IIS에 있습니까? 그렇다면 어떤 버전입니까? –
은 IIS 7에서 믿습니다. –