我在本地机器上设置的通配符子域上运行我的应用程序(基于 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>
我得到以下结果:
- http://域名.app(作品)
- http://domain.app/login(作品)
- http://域名.app(作品)
- http://sub.domain.app/login(404 未找到,该服务器上未找到所请求的 URL /login。)
有人可以帮帮我吗?
提前致谢
答案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>
这是一个猜测,但我认为您还需要在指令中替换路径。