2009-06-10 4 views
0

기본 개요 ... 난 IIS에서 사이트 설정을하위 도메인 문제

...
- "내 사이트"(wwwroot에 \ 내 사이트)에서이 가상 디렉터리 응용 프로그램
있다는 것을 - "업로드" (\ uploadfiles)
- 나는 또한 IIS에서 다른 사이트로 설정되어 하위 도메인을

"응용 프로그램"(wwwroot에의 \ MyApp를) ...
- "beta.mysite"(wwwroot에의 \의 mysitebeta) 그 아래에 2 개의 가상 디렉터리가 있습니다
- "업로드"(\ uploadfiles)
- 내가 https://beta.mysite.com/app를 입력 할 수 있습니다 ... 그리고는 ... 완벽하게 정상적으로에서 문제를 베타 사이트 로그를 제공합니다

하위 도메인이 잘 작동 .... "응용 프로그램"(wwwroot에의 \의 myappbeta) 버튼을 클릭하면 다시 포스트가 생성됩니다 ... https://www.mysite.com/app ...

모든 링크가 해당 파일의 올바른 상대 경로를 표시합니다 .... 그리고 내가 입력하면 https://beta.mysite.com/app/dir/page.aspx ... 실제로 베타 사이트의 해당 페이지로 이동합니다. 모든 링크가 올바른 위치로 이동합니다. 단지 나를 죽이는 포스트 백입니다 ...

답변

1

Have y ou는이 두 웹 사이트에 대해 다른 응용 프로그램 풀을 설정하려고 시도 했습니까? 똑똑해 지려고 노력하는 것 같고 두 가상 디렉터리가 실제로 같은 웹 사이트라고 결론을 내립니다.

다른 모든 방법으로 오류가 발생하면 ASP.NET에서 수동으로 생성하는 FORM 태그의 포스트 백 URL을 다시 쓸 수 있습니다. 아마도 App_Browsers 파일과 ControlAdapter를 사용하는 것이 가장 깨끗한 방법 일 것입니다.

이러한 ControlAdapter 구현의 예가 있지만 URL 재 작성을 사용하여 포스트 백에서 실제 배경 화면 URL로 되돌아 가지 않도록하기위한 것입니다. 그러나, 나는이 문제에 대한 아웃 - 오브 - 박스

public class FormRewriterControlAdapter : System.Web.UI.Adapters.ControlAdapter 
{ 
    protected override void Render(HtmlTextWriter writer) 
    { 
     base.Render(new RewriteFormHtmlTextWriter(writer)); 
    } 
} 

public class RewriteFormHtmlTextWriter : HtmlTextWriter 
{ 
    private const string contextItemKey = "FormActionWritten"; 

    public RewriteFormHtmlTextWriter(HtmlTextWriter writer) : base(writer) 
    { 
     InnerWriter = writer.InnerWriter; 
    } 

    public RewriteFormHtmlTextWriter(System.IO.TextWriter writer) : base(writer) 
    { 
     base.InnerWriter = writer; 
    } 

    public override void WriteAttribute(string name, string value, bool fEncode) 
    { 
     // If the attribute we are writing is the "action" attribute, and we are not on a sub-control, 
     // then replace the value to write with the raw URL of the request - which ensures that we'll 
     // preserve the PathInfo value on postback scenarios 

     if (name == "action" && !HttpContext.Current.Items.Contains(contextItemKey)) 
     { 
      // Use the Request.RawUrl property to retrieve the un-rewritten URL 
      value = HttpContext.Current.Request.RawUrl; 
      HttpContext.Current.Items[contextItemKey] = true; 
     } 

     base.WriteAttribute(name, value, fEncode); 
    } 
} 

Form.browser 파일 일 것이라고 생각 : 새 응용 프로그램 풀을 시도

<browsers> 
    <browser refID="Default"> 
     <controlAdapters> 
      <adapter controlType="System.Web.UI.HtmlControls.HtmlForm" adapterType="FormRewriterControlAdapter" /> 
     </controlAdapters> 
    </browser> 
</browsers> 
+0

... 아니 주사위를 ... 다시 쓰는 문제는 베타 버전이 고객 테스트를위한 준비 사이트로 사용된다는 것입니다 ... 저는 사용자 정의 컨트롤을 포함하여 100 개 이상의 클래스가 포함 된 40 개 이상의 프로젝트를 작업 중입니다 ... – Patrick

+0

아무 것도 다시 쓸 필요가 없습니다. 위의 코드는 문제를 해결하는 데 필요한 모든 것이어야합니다. – Thorarin