我是一个相当狂热的程序员,但最近转向网络开发,所以如果这个问题有点愚蠢,我深表歉意。
我正在构建一个应该支持多个域的电子商务 webApp。假设我有 2 个商店在我的应用程序中运行,每个商店都有自己的自定义域。
应用程序位于:www.main-app.com
商店 1 位于:www.store1.com
商店 2 位于:www.store2.com
我需要将所有请求重定向store1.com
到store2.com
传递main-app.com
一个 id,即商店 ID。商店 ID 用于加载每个商店的所有组件。
我已经设法将 CNAME 记录添加到 store1 和 store2 指向www.main-app.com
. 到目前为止一切顺利,当我www.store1.com
在浏览器中键入时,主应用程序会显示在屏幕上,但是我如何传递商店 ID 以便它知道要加载哪个商店?
哪种方法是使此功能成为可能的最佳方法?
本质上,我想输入www.store1.com
并www.main-app.com
接收加载 store1 的请求。我不想使用域转发,比如打字www.store1.com
,它会将用户重定向到类似www.main-app.com?storeId=1
.
我希望我说清楚了。
Web 浏览器将与每个请求一起向您的 Web 应用程序发送一个
Host
标头。此标头将包含用于访问该站点的域。您可以使用此标头根据用户使用访问它的域来更改站点的外观。任意数量的记录都可以指向同一台服务器,这将使服务器从所有域获取请求。通常这用于使用一台 Web 服务器托管多个域。从 HTTP 1.1 开始,服务器就知道请求是针对哪个请求的,HTTP 1.1 在请求的主机名的标头中添加了一个字段。
在 Apache 上,当您托管多个域时,您会创建一个 VirtualHost 并通常为每个域分配一个指向其文件位置的路径。但是,对于您所描述的内容,您将为每个商店创建一个虚拟主机,但将它们的所有根文件夹设置为相同的路径,该路径将包含您的主应用程序的文件。
在应用程序本身中,您甚至不需要 ID,因为所有请求都会包含一个字段,该字段会告诉您请求的主机是哪个主机。有了它,您可以索引商店之间不同的任何数据。在这种情况下,无需重定向任何内容。
Apache 可以使用需要安装和启用mod_rewrite的 RewriteRule 来自动化该过程。你做什么告诉它根据请求的域调用具有不同参数的页面。例如,您可以告诉它按照您的建议向每个请求添加一个 storeId,并使用该 storeId 来驱动逻辑。其他 Web 服务器可能也有类似的东西,我只是使用 Apache 来描述它,因为它是我最了解的一个。