我们正在创建一个 SAAS 基础应用程序,每个公司都有自己的子域。但如果公司想为我们的应用程序配置另一个域,他们可以这样做。
例如,我是一家在应用程序 www.saas.com 上注册的公司,我获得了子域名 company.saas.com,现在我想将我的 company.com 域名指向 company.saas.com,那么我们如何实现这一点?
我知道可以使用 Cname 来完成,但是有没有办法动态更新 Cname?
答案1
这完全取决于你的应用程序如何执行主机名检测。例如,如果它在 HTTPS 上运行,您需要在 Web 服务器上添加虚拟主机。根据您当前使用的情况subdomain.saas.example.com
以及软件能够检测到的情况,我们可以推断这应该是可能的。您只需使用与当前解决方案相同的方法来识别主机名即可。
在 DNS 级别你应该使用A
指向同一 IP 地址的记录。这是因为使用CNAME
记录只会导致对该company.saas.example.com IN A
记录进行另一次 DNS 查找,并且不会导致检测到的主机名发生任何变化,因此您不会从使用它中获得任何好处;即,它不是阻止配置此主机名检测方法的捷径。
如果您希望使用CNAME
(例如,如果的 IP 地址*.saas.example.com
可能会在未经客户确认的情况下更改),则建议使用子域,例如saas.example.net
而不是example.net
。这是因为使用CNAME
记录时,您无法在同一主机名上使用任何其他记录。使用域名本身,这意味着您无法添加MX
、TXT
等NS
记录。这将阻止将同一域名用于电子邮件等。
答案2
您可以使用 RewriteRule 将请求重定向到特定的 DocumentRoot,并且可以将规则的动态添加到 .htaccess 文件。
最好将虚拟主机添加到 Apache 的配置文件中,但每次更改后都必须重新启动 Apache。
.htaccess 文件:
RewriteEngine On
RewriteCond %{HTTP_HOST} (clientone.saas.example.com)
RewriteRule ^(.*)$ /clientonefolder/$1 [R=301,L]
RewriteCond %{HTTP_HOST} (clienttwo.saas.example.com)
RewriteRule ^(.*)$ /clienttwofolder/$1 [R=301,L]