Apache vhost 配置用于通配符子域名支持

Apache vhost 配置用于通配符子域名支持

我在本地机器上设置的通配符子域上运行我的应用程序(基于 laravel 5.4 构建)时遇到困难(在 Linux Mint 18.1 上运行 Apache 2.4.18)

因此,我为其设置了一个 vhost(domain.app)和一个子域(sub.domain.app),我的 apache vhost 文件如下所示:

# This is for the primary domain (domain.app)
<VirtualHost *:80>
        ServerName  domain.app

        ServerAlias www.domain.app


        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/test/domain.app/public

        <Directory /var/www/html/test/domain.app/public>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>

        <IfModule mod_dir.c>
            DirectoryIndex index.php index.pl index.cgi index.html index.xhtml index.htm
        </IfModule>

</VirtualHost>

# This is for the subdomain (sub.domain.app)
<VirtualHost *:80>
                ServerName domain.app
                VirtualDocumentRoot /var/www/html/test/%0/public
                ServerAlias *.domain.app
                <Directory /var/www/html/test/sub.domain.app/public>
                        <IfModule mod_rewrite.c>
                                Options -MultiViews
                                RewriteEngine On
                                RewriteCond %{REQUEST_FILENAME} !-f
                                RewriteRule ^ index.php [L]
                        </IfModule>
                </Directory>
</VirtualHost>

这对于以下所有 URL 均有效:

但是因为我想要一个通配符子域名,这意味着我不想在虚拟主机中硬编码 sub.domain.app,而是想要类似 anything.domain.app 的东西,所以我尝试替换

<Directory /var/www/html/test/sub.domain.app/public>

<Directory /var/www/html/test/%0/public>

我得到以下结果:

有人可以帮帮我吗?

提前致谢

答案1

回答我自己的问题。

我终于找到了解决方案。我正在为通配符子域使用以下 vhost 配置,它运行良好。

UseCanonicalName Off    
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerAlias *.domain.app
    VirtualDocumentRoot /var/www/html/test/%0/public
    DirectoryIndex  index.php index.htm index.html

    <Directory /var/www/html/test/*.domain.app/public/>
        AllowOverride   All
    </Directory>

    LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
    CustomLog /var/log/apache2/vhosts-access.log vcommon
    ErrorLog /var/log/apache2/vhosts-error.log
</VirtualHost>

希望这对遇到类似问题的人有用。

答案2

<Directory /var/www/html/test/sub.domain.app/public>这是一个猜测,但我认为您还需要在指令中替换路径。

相关内容