![Apache conf:如何在当使用 mod_vhost_alias 作为通配符虚拟主机时](https://linux22.com/image/561904/Apache%20conf%EF%BC%9A%E5%A6%82%E4%BD%95%E5%9C%A8%E5%BD%93%E4%BD%BF%E7%94%A8%20mod_vhost_alias%20%E4%BD%9C%E4%B8%BA%E9%80%9A%E9%85%8D%E7%AC%A6%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E6%97%B6.png)
首先,我们希望请求能够*.example.com
由相应的目录处理,并且我们使用with/var/www/*/
来实现这一点,如下所示:mod_vhost_alias
VirtualDocumentRoot
<VirtualHost *:80>
ServerAlias *.example.com
UseCanonicalName Off
VirtualDocumentRoot /var/www/%1/
</VirtualHost>
现在我们想通过将相同的 RewriteRules 应用于所有子域/目录(在 vhost 配置的<Directory>
块内)来扩展这个共享配置 - 但我们不知道如何引用子域/目录。
我们基本上尝试做这样的事情(请注意 %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>
这样的事可能吗?
谢谢。
答案1
好的,我们设法让它工作了。只需要对路径进行一些小的调整<Directory>
(即使用 * 通配符代替 %1)、删除 RewriteRules 模式中的 ^ 字符,并在替换字符串中添加前导 /:
<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在irc.freenode.net
答案2
<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>