如何动态更改链接网址的一部分?

时间:2011-10-27 17:46:50

标签: 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”插入到该链接的前面 - 替换那里的绝对链接或只是将其添加到相对链接。无论哪种方式,你都会留在开发网站上。

我觉得我过于复杂了。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以在母版页的末尾包含以下javascript,或者如果您有任何内容,则将ClientScript.RegisterStartUpScript方法添加到基页类:

<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 && links[index].href.search("javascript:"))
        {
            links[index].href = links[index].href.replace(host, host + "/dev.mysite.com");
        }
    }
</script>

答案 1 :(得分:0)

如果您使用iis 7.0+(或在visual studio中使用iis express),最简单的方法是使用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重写模块/ aproach。 有关url重写的更多信息,请参阅此处: http://learn.iis.net/page.aspx/461/creating-rewrite-rules-for-the-url-rewrite-module/