我的 documentroot 设置如下:var/www/html
我想要做的是:
cms.domain.com --> var/www/html/cms
domain.com --> var/www/html/cms/sites/site1
我正尝试使用虚拟主机来实现这一点。问题是我无法为每个(子)域设置 VirtualDocumentRoot,因为站点使用一堆脚本和配置,位于 var/www/html/includes 中,这些脚本和配置本应保持非公开状态,而应用程序使用 $_SERVER["document_root"] 调用这些脚本和配置。
我尝试过的是这样的:
<VirtualHost *:80>
ServerName domain.com
ServerAlias *.domain.com
ServerAlias www.domain.com
AliasMatch ^(.*)$ /cms/sites/site1/
DocumentRoot /var/www/html
<Directory /var/www/html>
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>
</VirtualHost>
对于子域名:
<VirtualHost *:80>
ServerName cms.domain.com
ServerAlias *.cms.domain.com
AliasMatch ^(.*)$ /cms/
DocumentRoot /var/www/html
<Directory /var/www/html>
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>
</VirtualHost>
不起作用。我想我真正想要的是将路径附加到 documentroot 之后,同时保持 documentroot 的原样。
答案1
这里有很多冲突的配置。我建议创建一个VirtualHost
for domain.com
andwww.domain.com
和另一个 for *.domain.com
and/or *.cms.domain.com AliasMatch
。 中也有优先级VirtualHosts
,所以 domain.com 应该是最后一个。
解决常见配置问题的最简单方法是符号链接/var/www/html/includes
到每个VirtualHost
目录,这样至少可以保持一致性。