Как динамически изменять часть URL-адреса ссылки?

#asp.net

#asp.net

Вопрос:

У меня есть живой сайт (mysite.com ) и сайт разработчика (dev.mysite.com ), который является точной копией живого сайта. Я пытаюсь перенаправить абсолютные ссылки сайта разработчика, чтобы ОСТАВАТЬСЯ на сайте разработчика. В настоящее время, конечно, нажатие на эти ссылки приводит меня на живой сайт, что не помогает мне тестировать. Я довольно новичок в asp, но после некоторых исследований я придумал кое-что для своего файла Global.asax.cs, который, как я думал, будет работать, но это не так. Вот что я пробовал:

 protected void Application_BeginRequest(object sender, EventArgs e)
{
    string url = HttpContext.Current.Request.Url.Host.ToString();
    string endOfPath = Request.RawUrl.ToString();

    if (url.Contains("mysite")) {
        Context.RewritePath("dev.mysite.com"   endOfPath);
    }
} 
 

Идея заключалась в том, что если вы начнете с dev.mysite.com нажатие на ссылку автоматически вставит «dev.mysite.com » на переднюю часть этой ссылки — замена того, что там было, на абсолютную ссылку или просто добавление ее к относительной ссылке. В любом случае вы останетесь на сайте разработчика.

У меня такое чувство, что я слишком усложняю это. Буду признателен за любую помощь.

Комментарии:

1. Можете ли вы изменить способ создания URL-адреса в первую очередь? Мы используем запись из настроек приложения для добавления значения в начале ссылки, вместо статического определения каких-либо ссылок?

2. Нет, все это жестко закодированные ссылки на разных страницах

3. Вы используете простой тег привязки для ссылок или управления сервером гиперссылок?

4. Это просто теги привязки.

Ответ №1:

Вы можете включить javascript ниже в конце главной страницы или добавить ClientScript.Зарегистрируйте метод startupscript в базовом классе страницы, если он у вас есть:

 <script type="text/javascript">
    var host = window.location.host;
    var links = document.getElementsByTagName("a");

    for (var index = 0; index < links.length; index  ) {
        if (links[index].href.search("__doPostBack") == -1 amp;amp; links[index].href.search("javascript:"))
        {
            links[index].href = links[index].href.replace(host, host   "/dev.mysite.com");
        }
    }
</script>
 

Комментарии:

1. Если я правильно это читаю, этот скрипт будет запускаться при каждой загрузке главной страницы и переписывать URL-адреса для добавления «/dev.mysite.com «. Это правильно?

Ответ №2:

если вы используете iis 7.0 (или iis express в Visual Studio), самый простой способ — использовать модуль перезаписи url с чем-то вроде этого:

 <system.webServer>
    <rewrite>
        <rules>
           <rule name="CanonicalHostNameRule1">
              <match url="(.*)" />
                 <conditions>
                    <add input="{HTTP_HOST}" pattern="^dev.mysite.com$" negate="true" />
                 </conditions>
                 <action type="Redirect" url="http://dev.mysite.com/{R:1}" />
            </rule>
         </rules>
   </rewrite>
</system.webServer>
 

очевидно, что это должно быть включено только в web.config вашего сайта разработчика. Если у вас предыдущая версия iis, также доступен другой модуль перезаписи url. При таком подходе вам не нужно изменять какой-либо код на вашем сайте.

РЕДАКТИРОВАТЬ: позже я понял, что на самом деле это не сработает, поскольку это зависит от iis, настроившего оба входящих URL-адреса. Вы могли бы попробовать использовать другой модуль перезаписи url / aproach. подробнее о перезаписи URL смотрите здесь: http://learn.iis.net/page.aspx/461/creating-rewrite-rules-for-the-url-rewrite-module /