【问题标题】:ASP.NET redirect between three web sites三个网站之间的 ASP.NET 重定向
【发布时间】:2014-01-01 04:21:09
【问题描述】:

例如,假设我的网站是www.mysite.com

我在这里创建了一个子域,比如说sub.mysite.com,并在这里部署了一个asp.net webform 应用程序。当我浏览到http://sub.mysite.com 时一切正常

我的一个朋友拥有另一个网站,比如说www.hissite.com,他为子域sub.hissite.com 创建了一个DNS 条目,并设置了我网站的IP 地址。他想将他网站的子域重定向到我网站的子域。

不幸的是,我的提供商告诉我,这种配置仅适用于二级域,我应该在我的 www.mysite.com Web 应用程序中创建一段代码,以检查请求是否与站点 sub.hissite.com 相关,并在这种情况下重定向到我的sub.mysite.com

如何在我的 webform 应用程序中检查请求是否针对 sub.hissite.com? 客户端浏览器中的 URL 会发生什么变化?

感谢您的帮助

编辑 1: 实际上我已经为我的网站配置了一个别名,但是在导航到 sub.hissite.com 时出现以下错误:

Application Request Routing Error 
500 - Internal server error. 
There is a problem with the resource you are looking for, and it cannot be displayed. The domain may not be inserted correctly on Rewrite Maps.

编辑 2: 按照OnoSendai 的回答,我实现了一个MVC ActionFilter

public class MyRedirectFilter : ActionFilterAttribute
{
    public override void OnActionExecuting( ActionExecutingContext filterContext ) {
        string newUri = "http://sub.mysite.com";
        HttpRequestBase request = filterContext.HttpContext.Request;
        string referer = request.ServerVariables["HTTP_HOST"]; 
        if ( referer != null && referer.Contains( "hissite" ) ) {
            filterContext.HttpContext.Response.Redirect( newUri, true );
        }
    }
}

现在应用程序运行良好。但是浏览器地址栏中的地址从www.hissite.com 变为sub.mysite.com。有什么办法让它不改变吗? 谢谢

【问题讨论】:

  • 您也可以配置 iis 来响应该子域
  • 你的意思是使用别名吗?
  • 使用绑定和主机名serverfault.com/questions/26166/…
  • 是的。你说得对。但不幸的是,我无法直接访问 IIS 设置,因为它是共享主机。我唯一能做的就是设置一个别名,然后将其转换为 IIS 绑定。然而这还不够,因为单独的绑定无法区分域和子域。
  • 你可以使用 urlrewrite 模块

标签: c# asp.net redirect response.redirect http-redirect


【解决方案1】:

基本上,您的 ISP 告诉您的是,您需要自己进行检查并重定向。

以编程方式执行此操作的一种方法是检查 HTTP_REFERER 标头,使用 Request.UrlReferrer 或通过 Request.ServerVariables 直接引用 - 如下所示:

if (Request.ServerVariables("HTTP_HOST") == "sub.hissite.com/page1.aspx")
    Response.Redirect("sub.mysite.com/page1.aspx");

现在你可能会想,'但是等等 - 我必须在所有页面上实现这个?'

哦,天哪,不!您可以尝试将此检查捆绑在一个整洁的 HttpModule 中。这将允许您拦截所有请求(包括资源请求,例如 jpg、js 和 css 文件)并决定要做什么 - 基本上,这就是 UrlRewrite 模块所做的。

可以在这里找到一篇关于 HttpModules 的非常简单整洁的帖子:

http://blogs.msdn.com/b/alikl/archive/2007/12/26/basic-httpmodule-sample-plus-bonus-case-study-how-httomodule-saved-mission-critical-project-s-life.aspx

希望它对你有用。

【讨论】:

  • 您好,感谢您的回答。我已经以 MVC ActionFilter 的形式实现了您的解决方案,并进行了一些小的更改(我忘了提到它是 MVC)。请查看我的编辑以进一步澄清。非常感谢:)
  • 很高兴它对你有用!关于 URL - 我知道保留 URL 的唯一方法是在他的网站上打开一个框架(或 IFrame),并将框架的源属性指向您的页面。你不能使用 server.execute 因为你在不同的服务器上。
【解决方案2】:

更简单的方法是configure IIS to point to your site for that kind of request,但正如您在 cmets 中所说,您不能因为您在无法访问 IIS 的共享主机中。

一个简单的解决方案可能是使用Asp.net Routing。 无论如何,您需要routing module to be installed on server

在 web.config 中:

<system.webServer>
...
<rules>
    <rule name="Rewrite subdomains">
        <match url="(.*)" />
        <conditions>
             <!--take all request for any subdomain of hissite.com-->
            <add input="{HTTP_HOST}" pattern="^(.+)\.hissite\.com$"  ignoreCase="true"/>
        </conditions>
        <!--rewrite request as sub.mysite.com-->
        <action type="Rewrite" url="http://sub.mysite.com/{R:0}" />
    </rule>
</rules>
</system.webServer>

我无法对此进行测试,因此您可能需要根据自己的需要进行调整。

【讨论】:

  • 哇!这似乎很容易。我应该把它放在mysite.comweb.config 中吗?
  • @Lorenzo 是在 system.webServer 部分
  • 这对我来说是最好的解决方案。但是,不幸的是,我的 ISP 没有安装路由模块。非常感谢您的回答,我从中学到了很多。 :)
  • @Lorenzo :D 乐于助人!
猜你喜欢
  • 2016-09-12
  • 2022-01-08
  • 2010-12-19
  • 2019-01-31
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
  • 2012-09-06
相关资源
最近更新 更多