2009-06-10 95 views
0

基本概況...子域問題

我在IIS中的站點設置...
- 「mysite的」(wwwroot的\ mysite的)下有2個虛擬目錄應用
- 「上傳」 (\ uploadfiles)
- 「應用程序」(wwwroot的\ MYAPP)

我也有,它被設置爲IIS中的不同網站的一個子...
- 「beta.mysite」(wwwroot的\ mysitebeta)在那裏有2個虛擬目錄
- 「uploads」(\ uploadfiles)
- 「應用程序」(wwwroot的\ myappbeta)

子域工作正常....我可以輸入https://beta.mysite.com/app ......它在帶來了測試網站日誌完美的罰款....問題是,當我點擊任何創建回發的按鈕...它會恢復到https://www.mysite.com/app ...

所有的鏈接顯示正確的相對路徑,以他們的文件....如果我輸入https://beta.mysite.com/app/dir/page.aspx ...它實際上會在測試版網站上進入該頁面,所有鏈接都會進入正確的位置...它只是回傳正在殺死我......

回答

1

有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

嘗試了新的應用程序池...沒有骰子...重寫事情的問題在於,測試版將用作客戶測試的中轉站點......我正在處理40多個包含超過100個類的項目,包括自定義控件...... – Patrick 2009-06-10 15:24:57