我想要做的事情在概念上对我来说似乎很容易,但我花了 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) 上进行了测试。