Apache conf:如何在通配符虚拟主机中使用mod_vhost_alias时指定<Directory / path / to / subdomain>中的子域

首先,我们需要一个对*.example.com的请求来处理相应的/var/www/*/目录,我们通过使用带有VirtualDocumentRoot mod_vhost_alias这个工作,如下所示:

 <VirtualHost *:80> ServerAlias *.example.com UseCanonicalName Off VirtualDocumentRoot /var/www/%1/ </VirtualHost> 

现在我们想通过在vhostconfiguration的<Directory>块中应用相同的RewriteRules到所有子域/目录来扩展这个共享configuration,但是我们不知道如何引用子域/目录。

我们基本上是想做这样的事情(注意使用%1,在这种情况下不起作用):

 <VirtualHost *:80> ServerAlias *.example.com UseCanonicalName Off VirtualDocumentRoot /var/www/%1/ <Directory /var/www/%1> RewriteEngine on RewriteRule ^about/?$ index.php?view=about RewriteRule ^settings/?$ index.php?view=settings RewriteRule ^support/?$ index.php?view=support </Directory> </VirtualHost> 

是这样的可能吗?

谢谢。

好的,我们设法让这个工作。 所需要的只是对<Directory>path(即使用*通配符而不是%1)进行小小调整,删除RewriteRules模式中的^字符,并在replacestring中添加前导/:

 <VirtualHost *:80> ServerAlias *.example.com UseCanonicalName Off VirtualDocumentRoot /var/www/%1/ <Directory /var/www/*> RewriteEngine on RewriteRule about/?$ /index.php?view=about RewriteRule settings/?$ /index.php?view=settings RewriteRule support/?$ /index.php?view=support </Directory> </VirtualHost> 

为了遵守ServerFault的政策(以及Google的索引),我将这个问题标记为答案,但是我必须强调,如果没有患者的帮助,我们不能在#httpd on irc的帮助下做到这一点。 freenode.net

在这种情况下不要打扰<Directory>

 <VirtualHost *:80> ServerAlias *.example.com UseCanonicalName Off VirtualDocumentRoot /var/www/%1/ RewriteEngine on RewriteRule ^/about/?$ /index.php?view=about RewriteRule ^/settings/?$ /index.php?view=settings RewriteRule ^/support/?$ /index.php?view=support </VirtualHost> 

如果除了需要执行Rewrite之外的其他操作,例如访问控制,请添加<Location>块而不是<Directory>块:

 <Location /> Order deny,allow Deny from all Allow from 10.0.0.0/8 </Location>