Получить полный URL-адрес страницы для веб-сайта в подпапке другого веб-сайта
Я использую Sitefinity (6.1), ASP.Net и фреймворк 4.0.
У нас есть сайт sitefinty, уже размещенный на IIS в качестве веб-сайта. В целях лицензирования мы хотим добавить новый сайт, также созданный с помощью Sitefinity, на тот же сайт, что и подпапка.
Допустим, веб-сайт 1 - это Foo, а новый веб-сайт называется Bar.
Проблема в том, что когда я получаю или использую форму относительного пути Bar, я действительно получаю путь от Foo.
Итак, я использую хак, чтобы заставить работать URL. Я использую относительный путь, а затем вставляю Бар вручную.
например, страница называется домом. ~ / home разрешается по http://www.foo.com/home. когда это должно быть http://www.foo.com/Bar/home, так что я просто добавляю Бар в атм вручную.
В ASP.Net, Sitefinity или MVC должен быть какой-то способ сказать, что это моя страница, дать мне полный URL.
У кого-нибудь есть опыт разрешения URL для сайтов на другом сайте?
3 ответа
Технически вы ищете ответ, подобный следующему: Как получить полный URL-адрес страницы, на которой я нахожусь в C#
Но что касается Sitefinity, вы наверняка столкнетесь с проблемами, потому что в нем много "подводных" ссылок на корень сайта. Посмотрите, например, на серверную часть в разделе Администрирование >> Настройки >> Дополнительно >> Виртуальные пути.
Таким образом, вы неизбежно столкнетесь с каким-либо перекрестным заражением и в итоге получите два сломанных участка.
Хотя я не за уклонение от лицензий, вот несколько советов:
- Они позволяют неограниченное количество поддоменов.
- Установите "бар" как приложение IIS таким образом
~/
будет решать правильно. - Изменить Администрирование >> Настройки >> Дополнительно >> Система >> Настройки SiteURL.
Эта последняя опция позволит вам установить корневой сайт (не уровень iis / asp.net, а уровень sitefinity), после чего вы сможете получить правильный URL через Sitefinity API с помощью page.GetFullUrl();
Это string url = node.Url.Replace("~/", "./");
не будет работать, если страница не на корневом уровне. Например, для этого URL: "xxxx://www.foo.com/sitename/sitefolder/sitepage" будет возвращено "xxxx://www.foo.com/sitename/sitefolder/home" вместо "xxxx: / /www.foo.com/sitename/home"
Если кому-то интересно, я нашел простое решение, которое работает во всех средах.
string url = node.Url.Replace("~/", "./");
Где узел имеет тип SiteMapNode (но вы можете, конечно, получить URL-адрес). Это дает правильный путь, если есть подпапка или нет.