Apache2.conf 使子域名通配符正常工作

Apache2.conf 使子域名通配符正常工作

我想要做的事情在概念上对我来说似乎很容易,但我花了 12 个多小时却没有成功。我想我已经接近成功了,但不确定。这是我需要的:

  • example.com 重定向至 www.example.com (301)

  • www.example.com 加载 /home/example/www/example.com/public_html/

  • *.example.com 加载 /home/example/www/*example.com/public_html/ (通配符)

我的情况是这样的... 通配符子域名不起作用,但其余的似乎可以,有什么建议吗?我看过很多相关的帖子,但没有一个能让我启动并运行:

<VirtualHost 1.2.3.4:80>
   ServerName example.com
   Redirect 301 / http://www.example.com/
</VirtualHost>

<VirtualHost 1.2.3.4:80>   
   DocumentRoot /home/example/www/example.com/public_html/
   ServerName www.example.com

   <Directory /home/example/www/example.com/public_html/>
      AllowOverride all
   </Directory>

</VirtualHost>

<VirtualHost 1.2.3.4:80>
   DocumentRoot /home/example/www/%1.example.com/public_html/
   ServerName subs.example.com
   ServerAlias *.example.com

   <Directory /home/example/www/%1.example.com/public_html/>
      AllowOverride all
   </Directory>
</VirtualHost>

答案1

如果您想要为其他目录创建通配符子域名(例如: test.example.com -> /var/www/test.example.com ,以及 ex.example.com -> /var/www/ex.example.com 。您必须加载 mod_vhost_alias 模块:

LoadModule vhost_alias_module modules/mod_vhost_alias.so

然后您可以创建(例如这个)配置文件:

<VirtualHost *:80>
   ServerName test.com
   Redirect 301 / http://www.test.com/
</VirtualHost>

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

<VirtualHost *:80>
   VirtualDocumentRoot /var/www/%0
   # You can make here:
   # VirtualDocumentRoot /var/www/%0/public_html
   ServerAlias *.test.com

</VirtualHost>

这是我在 /var/www 中的目录结构:

tree
.
├── haha.test.com
│   └── index.html
├── html
│   └── index.html
├── subs.test.com
│   └── index.html
├── test
│   └── index.html
└── test.com
    └── index.html

6 directories, 6 files

我已经在 VirtualMachine Debian 9.0 和 Apache/2.4.25 (Debian) 上进行了测试。

相关内容