虚拟主机的 DocumentRoot 上的通配符

虚拟主机的 DocumentRoot 上的通配符

我在 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>

相关内容