我想做这样的事情:
<VirtualHost *:80>
ServerName $variable.example.com
DocumentRoot /var/www/$variable
</VirtualHost>
例如,如果我去foo.example.com
它必须向我显示/var/www/foo
目录内容
什么是好的 apache 语法呢?
我想做这样的事情:
<VirtualHost *:80>
ServerName $variable.example.com
DocumentRoot /var/www/$variable
</VirtualHost>
例如,如果我去foo.example.com
它必须向我显示/var/www/foo
目录内容
什么是好的 apache 语法呢?
您不能$variable
在 servername 中拥有这样的内容并将其映射到文档根目录,但您可以使用 mod_rewrite 和通配符。
<VirtualHost *:80>
ServerName subdomain.example.com
ServerAlias *.example.com
DocumentRoot /var/www/
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.
RewriteCond %{REQUEST_URI}::%1 !^/([^/]+).*::\1
RewriteRule ^(.*)$ /%1/$1 [L]
</VirtualHost>
subdomain.example.com
可以是任何不是的子域www.example.com
。对于任何不以“www”开头的请求,子域被捕获为一个组(第二个条件),然后下一行确保请求尚未被路由到子域的名称中,并且规则路由它。
所以对于请求:
http://foo.example.com/bar/x.html
它被路由到:
/foo/bar/x.html
这是我在自由职业者工作中使用的:
在 httpd-vhosts.conf 下:
UseCanonicalName Off
<VirtualHost *:${AP_PORT}>
DocumentRoot ${US_ROOTF_WWW}/_client
ServerName client
ServerAlias client
<Directory "${HOME}\www\_client">
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:${AP_PORT}>
VirtualDocumentRoot "${US_ROOTF_WWW}/_client/%1"
ServerName subdomains.client
ServerAlias *.client
<Directory "${HOME}\www\_client\*">
Require all granted
</Directory>
</VirtualHost>
然后在 windows hosts 文件下放置所需的域和子域。
127.0.0.1 client
127.0.0.1 someone.client
127.0.0.1 someone2.client