
Я довольно заядлый программист, но недавно перешел на веб-разработку, поэтому прошу прощения, если этот вопрос покажется вам немного глупым.
Я создаю веб-приложение электронной коммерции, которое должно поддерживать несколько доменов. Допустим, у меня есть 2 магазина, работающих в моем приложении, каждый из которых имеет свой собственный домен.
Приложение находится по адресу: www.main-app.com
Магазин 1 находится по адресу: www.store1.com
Магазин 2 находится по адресу:www.store2.com
Мне нужно перенаправить все запросы, сделанные в store1.com
и store2.com
на main-app.com
передачу идентификатора, который является идентификатором магазина. Идентификатор магазина используется для загрузки всех компонентов каждого магазина.
Мне удалось добавить записи CNAME в store1 и store2, указывающие на www.main-app.com
. Пока все хорошо, когда я печатаю www.store1.com
в своем браузере, на экране отображается главное приложение, но как мне передать идентификатор магазина, чтобы он знал, какой магазин загружать?
Какой подход будет наилучшим для реализации этой функции?
По сути, я хочу набрать www.store1.com
и www.main-app.com
получаю запрос на загрузку store1. Я не хочу использовать переадресацию домена, например, набрав www.store1.com
и перенаправив пользователя на что-то вроде www.main-app.com?storeId=1
.
Надеюсь, я ясно выразился.
решение1
Веб-браузер отправитHost
заголовоквместе с каждым запросом к вашему веб-приложению. Этот заголовок будет содержать домен, используемый для доступа к сайту. Вы можете использовать этот заголовок для изменения внешнего вида и поведения сайта на основе домена, который пользователь использует для доступа к нему.
решение2
Любое количество записей может указывать на один и тот же сервер, что заставит сервер получать запросы со всех доменов. Обычно это используется для размещения нескольких доменов с использованием одного веб-сервера. Серверы знают, к чему относится запрос, начиная с HTTP 1.1, который добавил поле в заголовок для запрошенного имени хоста.
На Apache, когда вы размещаете несколько доменов, вы создаете VirtualHost и обычно указываете каждому из них путь к расположению их файлов. Однако для того, что вы описываете, вы бы создали виртуальный хост для каждого магазина, но установили бы для всех их корневых папок один и тот же путь, который будет содержать файлы для вашего основного приложения.
В самом приложении вам даже не понадобится идентификатор, потому что все запросы будут содержать поле, сообщающее, к какому хосту относится запрос. С его помощью вы можете индексировать любые данные, которые различаются между магазинами. В этом случае нет необходимости что-либо перенаправлять.
Apache может автоматизировать процесс с помощью RewriteRule, для которого требуетсяmod_rewriteустановлен и включен. Что вы делаете, так это говорите ему вызывать страницы с другим параметром в зависимости от запрошенного домена. Например, вы можете сказать ему добавлять storeId к каждому запросу, как вы предложили, и использовать этот storeId для управления логикой. Другие веб-серверы, вероятно, имеют что-то эквивалентное, я просто использую Apache, чтобы описать это, поскольку это тот, который я знаю лучше всего.