Apache:每个子域上的virtualhost到相应的目录

Yuk*_*élé 3 apache wildcard-subdomain virtualhost

我想做这样的事情:

<VirtualHost *:80>
  ServerName $variable.example.com
  DocumentRoot /var/www/$variable
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

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

那个好的apache语法是什么?

Jon*_*Lin 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>
Run Code Online (Sandbox Code Playgroud)

subdomain.example.com可以只是任意子域名,是不是www.example.com.对于任何不以"www"开头的请求,子域将被捕获为一个组(第二个条件),然后下一行确保请求尚未被路由到子域名,并且规则将其路由.

所以对于请求:

http://foo.example.com/bar/x.html
Run Code Online (Sandbox Code Playgroud)

它被路由到:

/foo/bar/x.html
Run Code Online (Sandbox Code Playgroud)