设置如下。我有一个域名,例如,example.com
我已使用 设置了 Apache2 VirtualDocumentRoot
,这样我就可以轻松地将子域名指向特定文件夹:
文件sites-available/websites.conf
:
ServerName example.com
ServerAlias *.example.com
VirtualDocumentRoot /var/www/websites/%1/
<Directory /var/www/websites/%1/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
因此,当您访问时,test.example.com
它会搜索test
网站目录下的文件夹并为其提供服务。
这可以按预期工作,但我想使用 Let's Encrypt 进行 SSL。它还不能处理通配符证书。我该如何解决这个问题?
现在的情况:
安装 let's encrypt 证书:sudo certbot --apache -d example.com -d admin.example.com -d www.example.com
文件:sites-available/000-default.conf
:
DocumentRoot /var/www/websites/current/
<Directory /var/www/websites/current/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<IfModule mod_dir.c>
DirectoryIndex index.php index.pl index.cgi index.html index.xhtml index.htm
</IfModule>
# Let's Encrypt Redirect
RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
所有子域名仍将重定向至https
。只有 topdomainexample.com
和admin.example.com
应www.example.com
为 https。
答案1
问题是您没有以任何特定于站点的方式确定任何配置的范围。
需要注意的是,“每个站点”单独的配置文件实际上并不是 Apache httpd 的功能。它只是为了管理方便而制定的(相对常见的)惯例,最终Include
在加载配置时使用主配置文件中的指令将所有内容合并到单个配置中。
通常,这些单独的配置文件包含所有内容VirtualHost
以决定其效果,但您似乎只有全局配置,包括 http 到 https 的重定向。
答案2
尝试从服务器创建证书
certbot certonly -d *.example.com -d admin.example.com -d www.example.com
Wildcard domains are not supported: *.example.com