Подтвердить что ты не робот

Как обращаться к основному домену без жесткого кодирования его имени?

У меня есть доменное имя: TestSite.com. Я создаю несколько поддоменов для этого сайта и ссылаюсь на них как на first.TestSite.com, second.TestSite.com и т.д.

Как я могу ссылаться на TestSite.com относительно без необходимости жестко закодировать его имя в файле html или aspx в first.TestSite.com? Я имею в виду (например, использование папок), если у меня есть папка TestSite и первая папка

тестовый сайта/первая

то сначала я могу ссылаться на родительскую папку TestSite на

../

Что я использую для ссылки на TestSite.com с сайта first.TestSite.com? Спасибо.

4b9b3361

Ответ 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 для тестирования.