获取页面的完整网址,用于另一个网站的子文件夹中的网站

本文关键字:网站 另一个 用于 文件夹 获取 | 更新日期: 2023-09-27 18:32:46

我正在使用Sitefinity(6.1),ASP.Net 和4.0框架。

我们有一个网站已经托管在IIS上作为一个网站。出于许可原因,我们希望添加一个新站点,也是使用 Sitefinity 制作的网站作为子文件夹。

假设网站 1 是 Foo,新网站称为 Bar。

问题是当我从 Bar 获取或使用相对路径时,我真的从 Foo 那里得到了路径。

所以 atm 我正在使用一个黑客来让网址工作。我使用相对路径,然后插入酒吧人。

例如,页面被称为主页。 ~/home 在应该 http://www.Foo.com/Bar/home 时解析为 http://www.Foo.com/home.,所以我只需在手动 atm 中添加 Bar。

ASP.Net 或Sitefinity或MVC中一定有某种方式说这是我的页面,给我完整的网址。

有没有人在解析另一个网站中的网站的网址方面有经验?

获取页面的完整网址,用于另一个网站的子文件夹中的网站

从技术上讲,您正在寻找这样的答案:如何在 C# 中获取我所在的页面的完整 url

但是关于Sitefinity,您一定会遇到麻烦,因为它有许多对站点根目录的"水下"引用。例如,在后端的"管理>>设置">>"高级>>虚拟路径"下查看。

因此,您一定会遇到一些交叉污染,并最终导致两个损坏的站点。

虽然我不支持躲避许可证,但这里有一些建议:

  • 他们确实允许无限的子域。
  • 将"bar"安装为 IIS 应用程序,这样~/就可以正确解析。
  • 更改"管理">>"设置">>"高级>>系统">>"站点网址"设置

最后一个选项将允许您设置站点根目录(不是iis/asp.net级别,而是sitefinity级别),此时您可以通过Sitefinity API检索正确的URL

,并page.GetFullUrl();

如果有人想知道,我找到了适用于所有环境的简单解决方案。

string url = node.Url.Replace("~/", "./");

其中节点的类型是SiteMapNode(但当然,您可以根据需要获取URL)。如果是否有子文件夹,这将提供正确的路径。

如果页面不在根级别,则此string url = node.Url.Replace("~/", "./");不起作用。例如,对于此网址:"xxxx://www.foo.com/sitename/sitefolder/sitepage",它将返回"xxxx://www.foo.com/sitename/sitefolder/home",而不是"xxxx://www.foo.com/sitename/home"