引用子域的相对(父)路径

时间:2012-09-18 03:04:35

标签: asp.net subdomain

我有一个包含多个子域的网站,可以将用户引导到我网站上的子文件夹中。在每个子文件夹中都有一个Default.aspx文件,它执行一些处理,然后将用户重定向到“../ Default.aspx”。

如果您输入该页面的完整URL,则此方法可以正常工作。如果您尝试通过子域访问它,则“..”父级没有被正确解析,只是将子文件夹路径连接到主路径,我得到一个找不到的页面。

我的应用程序的根路径是www.domain.com/root。 子域名指向subdomain.domain.com/root/subfolder 当我导航到subdomain.domain.com时,我收到此错误:

“404 - /root/subfolder/root/Default.aspx not found”

我想要的只是subdomain.domain.com将用户重定向到一个文件夹级别到www.domain.com/root/Default.aspx

有人可以帮忙吗?这是使用共享托管服务提供商的功能/限制 - 子域仅限于指向它们的文件夹吗?

2 个答案:

答案 0 :(得分:1)

您的描述有点令人困惑,因为您将本地路径和URL混合在一起。我是对的,你正试图这样做:subdomain.domain.com/root/subfolder/Default.aspx的网页重定向到www.domain.com/root/Default.aspx

这意味着你要做两件事:

  1. 从子域subdomain重定向到子域www
  2. 导航到一个文件夹。
  3. 您可以在单个HTTP重定向中执行这两项操作。为此,请使用Response.Redirect方法,并确保在URL中使用www子域,以及要显示的页面的正确绝对路径。

    Response.Redirect("http://www.domain.com/root/Default.aspx");
    

    <强>更新

    或者,在同一个域中重定向到相对于当前页面的URL。

    Response.Redirect( Page.ResolveClientUrl( "../Default.aspx" ) );
    

    更新2

    或者,使用Host HTTP标头区分子域并在您的共享代码库中以编程方式切换。

答案 1 :(得分:0)

答案是将所有子域指向同一文件夹(主代码库),然后在主文件中,根据http标头进行切换。如果他们是从partner1.domain.com进来的,请使用css1 - 如果他们来自partner2.domain.com,请使用css2等。

这允许我在整个代码中使用相对路径并在浏览器的URL栏中保留子域。

一个警告 - 如果您在多个环境中进行测试(我有一个DEV和一个TST),您需要一些代码来检测您所处的环境并以稍微不同的方式运行,因为http标头主机会显示类似“localhost”的内容:51510" 。对我来说,这些子域只存在于我的生产环境中。

归功于bgever - 谢谢!