5

我想做这样的事情:

<VirtualHost *:80>
  ServerName $variable.example.com
  DocumentRoot /var/www/$variable
</VirtualHost>

例如,如果我去foo.example.com它必须向我显示/var/www/foo目录内容

什么是好的 apache 语法呢?

4

2 回答 2

7

您不能$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
于 2013-09-12T09:00:21.523 回答
0

这是我在自由职业者工作中使用的:

在 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
于 2016-07-10T07:42:49.423 回答