Apache 通配符子域和静态子域的虚拟主机

Apache 通配符子域和静态子域的虚拟主机,apache,subdomain,virtualhost,wildcard-subdomain,Apache,Subdomain,Virtualhost,Wildcard Subdomain,我有一个奇怪的情况,我想让URLapp1.example.com、example.com和*.example.com都使用不同的虚拟主机。这就是我所拥有的(不包括example.com,因为它只会让事情变得更混乱) ServerName app1.example.com ServerAlias app1.example.com DocumentRoot=/var/www/app1 #此处显示此应用的其他配置 ServerName wildcard.example.com ServerAlias

我有一个奇怪的情况,我想让URL
app1.example.com
example.com
*.example.com
都使用不同的虚拟主机。这就是我所拥有的(不包括
example.com
,因为它只会让事情变得更混乱)


ServerName app1.example.com
ServerAlias app1.example.com
DocumentRoot=/var/www/app1
#此处显示此应用的其他配置
ServerName wildcard.example.com
ServerAlias*.example.com
DocumentRoot=/var/www/wildcard
#此处显示此应用的其他配置
问题是它们相互冲突。谁先上榜谁就赢。如何同时托管通配符虚拟主机和特定虚拟主机

注意:我不仅仅是在配置中更改
DocumentRoot
,因此使用
mod\u rewrite
更改DocumentRoot变量并不能解决此问题。


<VirtualHost *:80>
  DocumentRoot /var/www/app1
  ServerName app1.example.com
</VirtualHost>

<VirtualHost *:80>
  DocumentRoot /var/www/example
  ServerName example.com
</VirtualHost>

<VirtualHost *:80>
  DocumentRoot /var/www/wildcard
  ServerName other.example.com
  ServerAlias *.example.com
</VirtualHost>
DocumentRoot/var/www/app1 ServerName app1.example.com DocumentRoot/var/www/example ServerName example.com DocumentRoot/var/www/wildcard ServerName other.example.com ServerAlias*.example.com

应该有用。如果没有获得显式匹配,则第一个条目将成为默认条目。因此,如果让app.otherexample.com指向它,它将被捕获为app1.example.com。

通配符只能在
服务器别名中使用,而不能在
服务器名中使用。让我难堪的事

对于您的用例,以下内容应该足够了

<VirtualHost *:80>
    ServerAlias *.example.com
    VirtualDocumentRoot /var/www/%1/
</VirtualHost>

ServerAlias*.example.com
VirtualDocumentRoot/var/www/%1/

这也适用于https。需要一个解决方案来制作项目目录,就是这样。因为chrome不再喜欢非ssl,而是使用免费ssl。注意:我的Web服务器是Windows 10上的Wamp64,因此我不会使用此配置,因为存在变量,除非您使用wamp

<VirtualHost *:443>
ServerAdmin test@test.com
ServerName test.com
ServerAlias *.test.com

SSLEngine On
SSLCertificateFile "conf/key/certificatecom.crt"
SSLCertificateKeyFile "conf/key/privatecom.key"

VirtualDocumentRoot "${INSTALL_DIR}/www/subdomains/%1/"

DocumentRoot "${INSTALL_DIR}/www/subdomains"
<Directory "${INSTALL_DIR}/www/subdomains/">
    Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>

服务器管理员test@test.com
ServerName test.com
ServerAlias*.test.com
斯伦金安
SSL证书文件“conf/key/certificatecom.crt”
SSLCertificateKeyFile“conf/key/privatecom.key”
VirtualDocumentRoot“${INSTALL_DIR}/www/subdomains/%1/”
DocumentRoot“${INSTALL_DIR}/www/subdomains”
选项+索引+包含+跟随符号链接+多视图
允许超越所有
要求所有授权

只是一个问题,
NameVirtualHost*:80
做什么?此指令启用基于名称的虚拟主机,并将告诉apache侦听端口80上的所有ip(*)。Apache2.2文档:删除
NameVirtualHost*:80
:AH00548:NameVirtualHost无效,将在下一版本中删除通配符1对我不起作用,你知道为什么吗?
NameVirtualHost*:80
对Apache2.2很重要,不需要Apache2.4,我不知道为什么。
<VirtualHost *:443>
ServerAdmin test@test.com
ServerName test.com
ServerAlias *.test.com

SSLEngine On
SSLCertificateFile "conf/key/certificatecom.crt"
SSLCertificateKeyFile "conf/key/privatecom.key"

VirtualDocumentRoot "${INSTALL_DIR}/www/subdomains/%1/"

DocumentRoot "${INSTALL_DIR}/www/subdomains"
<Directory "${INSTALL_DIR}/www/subdomains/">
    Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>