我有一个实时网站(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”插入到该链接的前面 - 替换那里的绝对链接或只是将其添加到相对链接。无论哪种方式,你都会留在开发网站上。
我觉得我过于复杂了。任何帮助将不胜感激。
答案 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/