Как обращаться к основному домену без жесткого кодирования его имени?
У меня есть доменное имя: TestSite.com. Я создаю несколько поддоменов для этого сайта и ссылаюсь на них как на first.TestSite.com, second.TestSite.com и т.д.
Как я могу ссылаться на TestSite.com относительно без необходимости жестко закодировать его имя в файле html или aspx в first.TestSite.com? Я имею в виду (например, использование папок), если у меня есть папка TestSite и первая папка
тестовый сайта/первая
то сначала я могу ссылаться на родительскую папку TestSite на
../
Что я использую для ссылки на TestSite.com с сайта first.TestSite.com? Спасибо.
Ответы
Ответ 1
Нельзя использовать чистые относительные ссылки. Вы должны запрограммировать его как строковое манипулирование.
Что-то вроде:
var host = location.host;
var lastPeriod = host.lastIndexOf(".");
var remainder = host.substring(0, lastPeriod);
var afterSecondLastPeriod = remainder.lastIndexOf('.') + 1
var baseDomain = host.substring(afterSecondLastPeriod);
console.log(baseDomain);
EDIT: более короткая версия с использованием регулярного выражения:
var baseDomain = host.match(/[^.]*\.[^.]*$/)[0]
Это общий, поэтому он всегда будет возвращать последнюю часть. Независимо от того, будет ли он a.TestSite.com
, b.a.TestSite.com
и т.д., Он вернет TestSite.com
.
Вам придется изменить его, если это предположение неверно.
Ответ 2
Если вы хотите сохранить свои относительные ссылки, вы можете использовать элемент base
.
[Атрибут базового элемента href] указывает абсолютный URI, который действует как базовый URI для разрешения относительных URI.
Итак, добавьте элемент base
, укажите href
, который вы хотите, и все относительные URI на странице теперь используют URI, который вы указали в качестве базового URI.
<head>
<base href="http://testsite.com" />
</head>
Это все, что вам нужно. Однако, если вы хотите сделать вещи немного чище, вы можете вытащить этот URI из web.config, используя System.Configuration.ConfigurationManager.AppSettings
. Вот фрагмент aspx:
<head>
<base href="<%= ConfigurationManager.AppSettings["rootdomain"] %>" />
</head>
И web.config:
<configuration>
<appSettings>
<add name="rootdomain" value="http://testsite.com" />
</appSettings>
</configuration>
Этот метод позволяет вам воздействовать на многие элементы из одного, и его значение может быть выведено из web.config.
Ответ 3
Поскольку вы отметили свой вопрос ASP.NET, я собираюсь предположить, что вы хотите сделать это на стороне сервера, поэтому вы не полагаетесь на JavaScript на стороне клиента для создания ссылок HTML.
Прежде всего, убедитесь, что у вас есть файл web.config на ваших сайтах субдомена и добавьте его в конфигурацию:
<configuration>
<appSettings>
<add name="MainDomain" value="example.com" />
</appSettings>
</configuration>
Используя этот параметр на страницах ASPX, гиперссылки на одной из ваших страниц субдоменов будут выглядеть так:
<a href="<%$ AppSettings: MainDomain %>">Go to main domain home page</a>
<a href="<%$ AppSettings: MainDomain %>/products.aspx">Go to products page on the main domain</a>
Настройка с помощью name="MainDomain"
будет считана из файла конфигурации и вставлена на страницу, где указано <%$ AppSettings: MainDomain %>
. Таким образом, вы создаете требуемый HTML на стороне сервера, без необходимости жесткого кодирования.
Если вам нужно изменить имя, просто обновите файл конфигурации, и все страницы автоматически будут использовать новое имя домена.
Ответ 4
Альтернативным решением было бы использовать исходное имя домена для живого сервера, но укажите его в среду разработки.
Вы можете переопределить DNS-запросы в Windows, добавив строки в этот файл.
C:\Windows\System32\Drivers\Etc\хостов
Добавьте в текстовый редактор следующее.
127.0.0.1 www.livesite.com
127.0.0.1 first.livesite.com
127.0.0.1 second.livesite.com
Теперь эти области будут отображаться в locahost. Таким образом, не требуется взломать HTML для тестирования.