2012-04-01 4 views
12

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

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

тестового сайт/первой

, то из первого я могу обратиться к своей папке родительской тестового сайта с помощью

../

Что я использую для обозначения TestSite.com из first.TestSite.com? Благодарю.

+2

Папки представляют собой вложенную иерархию. Субдоменов нет. Субдомены могут вводить проблемы для javascript и файлов cookie и сертификатов ssl. Он может даже вводить проблемы для таких вещей, как кэширование изображений - это blank.gif from first.testsite.com такое же изображение, как blank.gif from testsite.com? Это не для браузера. –

+0

Субдомены также могут вызывать проблемы для пауков и ранжиров поисковых систем, если это имеет значение для вашего дела. –

+0

@BrianWhite - это правильный SSL. Кроме того, SSL будет работать только с одним IP-адресом (с Apache). Поэтому, даже если у вас есть деньги на покупку сертификатов SSL для каждого поддомена, им нужно будет иметь свои собственные IP-адреса. Это может быть невозможно в зависимости от ограничений вашего интернет-провайдера. – cgTag

ответ

11

Нельзя использовать чистые относительные ссылки. Вы должны запрограммировать его как строчную манипуляцию.

Что-то вроде:

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.

Вам придется изменить его, если это предположение неверно.

5

Если вы хотите сохранить свои относительные ссылки, вы можете использовать элемент 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.

1

Поскольку вы отметили свой вопрос 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 на стороне сервера, без необходимости жесткого кодирования.

Если вам нужно изменить имя, просто обновите файл конфигурации, и все страницы автоматически будут использовать новое доменное имя.

1

Альтернативным решением будет использование исходного доменного имени для сервера в реальном времени, но укажите его в среду разработки.

Вы можете переопределить поиск 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 для тестирования.

+1

Предупреждение, указывая на несколько доменов до 127.0.0.1, всегда вызывает у меня проблемы со странными способами. Это никогда не оказывалось простым решением сложной проблемы, с которой я столкнулся. Я пробовал его в самых разных ситуациях и всегда возвращаю его. –

+1

@Brian: Нет ничего плохого в AFAIK с указанием нескольких имен хостов до 127.0.0.1, больше, чем с указанием нескольких имен хостов на любой другой IP-адрес. Тем не менее, это означает, что вам необходимо настроить веб-сервер разработки на виртуальный хостинг на основе имен (если вы не хотите, чтобы все ваши сайты разработки выглядели одинаково). –

+0

@BrianWhite Большинство веб-разработчиков используют хосты для указания нескольких доменов на свой локальный хост. В противном случае невозможно работать на более чем одном веб-сайте. Поскольку только один сайт может быть настроен для работы с localhost. То, что я делаю, это изменить .com на .local для всех моих сайтов. Пример; www.thinkingmedia.ca становится www.thinkingmedia.local на моей машине dev. В настоящее время у меня 50+ локальных сайтов без проблем. Извините, что у вас были проблемы, но если вы начнете новый вопрос о проблемах. Я был бы рад помочь. – cgTag

Смежные вопросы