Вопрос субдомена - PullRequest
       13

Вопрос субдомена

0 голосов
/ 10 июня 2009

базовый обзор ...

У меня есть настройки сайта в iis ...
- "mysite" (wwwroot \ mysite), под которым находятся 2 приложения виртуальных каталогов
- "uploads" (\ uploadfiles)
- "app" (wwwroot \ myapp)

У меня также есть поддомен, который настроен как другой сайт в iis ...
- "beta.mysite" (wwwroot \ mysitebeta), под которым есть 2 виртуальных каталога
- "uploads" (\ uploadfiles)
- "app" (wwwroot \ myappbeta)

субдомен работает нормально .... я могу набрать https://beta.mysite.com/app ... и он открывает журнал бета-сайта совершенно нормально .... проблема в том, когда я нажимаю на любой из кнопок, которые создают сообщение назад ... он возвращается к https://www.mysite.com/app...

все ссылки отображают правильный относительный путь к их файлам .... и если я наберу https://beta.mysite.com/app/dir/page.aspx..., он фактически перейдет на эту страницу на бета-сайте, все ссылки будут идти вправо пятна ... это просто постбэки, которые убивают меня ...

1 Ответ

1 голос
/ 10 июня 2009

Вы пытались установить другой пул приложений для этих двух сайтов? Похоже, он пытается быть «умным» и приходит к выводу, что два виртуальных каталога на самом деле являются одним и тем же веб-сайтом.

Если ничего не помогает, вы можете переписать URL-адрес обратной передачи в FORM-теге, который ASP.NET генерирует вручную. Использование файла 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 file:

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