我在ubuntu VPS上有一个SSL域,我希望所有子域都指向一般的example.com,例如:site1.example.com,site2.example.com从example.com加载代码。
我知道如何使用虚拟主机完成此操作,但我不希望每次都添加新的虚拟主机并重新启动apache。
所以我读了Willcard域名'但我无法设置它。另外阅读我必须添加这个o虚拟主机定义' ServerAlias * .example.com'还有一些我必须添加区域记录或者像这样的东西。
<VirtualHost IP:443>
VirtualDocumentRoot /var/www/example.com/public/
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite
SSLCertificateFile
SSLCertificateKeyFile
SSLCertificateChainFile
ServerAlias *.example.com
Options Indexes FollowSymLinks MultiViews
</VirtualHost>
我在网络服务器方面很年轻,所以任何详细的步骤都会有所帮助。
答案 0 :(得分:1)
首先,您必须拥有通配符SSL证书并安装它。它们与标准SSL证书不同。一个人的价格要贵一些。您可以创建一个自签名的,但这只适用于使用。
进行测试更正,我误解了。如果要将所有子域重定向到父域,则不需要通配符SSL。如果您还想要具有SSL的唯一子域,则只需要它。
接下来你已经是ServerAlias * .example.com
最后,对于每个子域,您需要配置CNAME DNS记录以将子域指向父example.com。我强烈建议您在开始尝试更改DNS设置之前彻底研究这个问题。有些更改可能会持续很长一段时间,即使您再次更改它们也是如此。我不知道你用什么来管理你的DNS所以我不能提供细节,如果你不熟悉你正在做的事情,我也不鼓励你做这些改变。您可以将您的网站DNS分解几天。也就是说,只要你不搞乱任何现有的东西,它实际上并不是很困难。
在CPanel中,我可以为通配符子域配置DNS记录,例如..
答案 1 :(得分:0)
<VirtualHost *:443>
ServerAdmin x@xxx.org
ServerAlias *.yourdomain.net
#ServerName could be any non-exist sub-domain
ServerName blabla.bla.yourdomain.net
ServerSignature On
SSLEngine On
SSLCertificateFile path_of_your_cert
SSLCertificateKeyFile path_of_your_key
SSLCACertificateFile path_of_your_intermediate_cert
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder On
DirectoryIndex index.html index.php index.htm
DocumentRoot /yourWebRoot
RewriteEngine On
RewriteMap lowercase int:tolower
# Disable access to domains like "a.b.yourdomain.net"
RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.yourdomain\.net$
RewriteRule ^.*$ - [R=502,L]
# Rewrite sub.yourdomain.net to folder /yourWebRoot/sub
RewriteCond %{HTTP_HOST} ^(.*)\.yourdomain\.net$
RewriteRule ^(.*)$ /yourWebRoot/${lowercase:%1}/$1
RewriteRule (.*)/icons/(.*) /usr/share/apache2/icons/$2 [L]
DirectoryIndex index.php index.htm index.html
</VirtualHost>
如果您希望您的子域全部转到同一个文档根文件夹,请删除我的示例conf中的所有重写。
ServerName是conf文件中必备的
如果您没有通配符ssl(70 $ -1000美元/年),请使用重写将所有其他域重定向到主域。 (但这可能导致cookie / postdata泄漏)