用户在我的应用程序中获得了一个子域名,customer.myapp.com。由于用户希望使用自己的自定义域名,我希望他们设置一个 CNAME 记录,将 customer.com 指向 customer.myapp.com。我希望以避免为每个客户创建虚拟主机记录,但我认为我必须这样做。我找不到明确的答案,所以我的假设正确吗?如果是这样,最好的方法是什么?我的应用程序可以以编程方式编辑/添加虚拟主机吗?当客户注册我的服务时,我希望不插手。Shopify 和 Tumblr 等服务如何处理这个问题?
答案1
也许你对 mod_vhost_alias 感兴趣http://httpd.apache.org/docs/2.2/mod/mod_vhost_alias.html。您无需设置每个域,只需设置一条指令,告诉 apache 在包含该域名的路径中搜索域的 DocumentRoot。
答案2
我曾经在一家我曾经工作过的公司看到过这种做法,但那不是我做的。 Florian 的回答稍作扩展,有一篇博客文章介绍了如何做到这一点并解释了它的工作原理:https://muffinresearch.co.uk/redirecting-subdomains-to-directories-in-apache/
答案3
您可以使用 ServerAlias 目录(它是 ServerName 的一个插件)。它为虚拟主机提供“其他”名称列表。
更难实现的方法是使用 mod_rewrite,它也可以用于虚拟主机。如果您要为虚拟主机使用数百或数千个名称,这可能是更好的选择。但它很少使用。它带来了不需要重新加载 apache 的巨大好处。一些文档在这里:http://httpd.apache.org/docs/2.2/rewrite/vhosts.html
编辑:我没有想到或提到 rewritemap 选项: http://httpd.apache.org/docs/2.4/rewrite/rewritemap.html
我希望“大服务”能够针对其用例编写一些更有效的东西!