首先,我们需要一个对*.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>