Apache:将(子)域映射到目录而不更改文档根目录

Apache:将(子)域映射到目录而不更改文档根目录

我的 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

这里有很多冲突的配置。我建议创建一个VirtualHostfor domain.comandwww.domain.com和另一个 for *.domain.comand/or *.cms.domain.com AliasMatch。 中也有优先级VirtualHosts,所以 domain.com 应该是最后一个。

解决常见配置问题的最简单方法是符号链接/var/www/html/includes到每个VirtualHost目录,这样至少可以保持一致性。

相关内容