![虚拟主机的 DocumentRoot 上的通配符](https://linux22.com/image/609893/%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E7%9A%84%20DocumentRoot%20%E4%B8%8A%E7%9A%84%E9%80%9A%E9%85%8D%E7%AC%A6.png)
我在 apache2 中对通配符子域名使用这个配置,效果很好:
<VirtualHost *:80>
DocumentRoot /var/www/
ServerName sumdomains.example.com
ServerAlias *.example.com
RewriteEngine On
RewriteRule ^/(.*) /%{HTTP_HOST}/$1
</VirtualHost>
这意味着,请求http://user.example.com/foo.html将获取文件 /var/www/用户.example.com/foo.html。
但我想要请求 http://用户.example.com/foo.html 从 /var/www/ 获取文件用户/foo.html。
我应该使用哪个通配符?
答案1
设置重写规则抓取 sub.domain 并重定向到 /sub/requestedFile
RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9-]+)\.example.com$
RewriteRule ^(.+) /%1/$1 [L,QSA]
或者将 VirtualDocumentRoot 设置为 %-1 来代表子域。
<VirtualHost *:80>
VirtualDocumentRoot /var/www/%-1
ServerName sumdomains.example.com
ServerAlias *.example.com
</VirtualHost>