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