我有一个文件夹完整的网站: /var/www
我有一个域名: example.com
我想在我的httpd.conf中编写一个规则,它将为/var/www每个站点设置一个别名。
例如: /var/www/hello/public可以通过example.com/hello访问。
目前,我只是手动为每个站点写入别名定义: Alias /hello "/var/www/hello/public/"
最简单的解决scheme是使用mod_vhost_alias 。 它并不完全符合你所描述的,但它非常接近。
vhost_alias_module使用您的分布偏好的任何技术(在基于Debian的发行版上的a2enmod vhost_alias )。 将这些指令添加到httpd.conf :
UseCanonicalName Off VirtualDocumentRoot /var/www/%1/public
为example.com创build通配符DNS条目,以便将example.com的任何子域定向到您的服务器。
现在访问“hello.example.com”将加载位于/var/www/hello/public的站点。
另外,如Gabor所提到的,你可以使用mod_rewrite 。 我要概述的解决scheme假设您在example.com下没有其他内容。
a2enmod rewrite在基于Debian的发行版上a2enmod rewrite )。 将这些指令添加到example.com的VirtualHost :
RewriteEngine On RewriteRule ^([^/]+)(.*) /var/www/$1/public/$2
这将重写“example.com/hello/steve”到/var/www/hello/public/steve的请求。
为您的域名和webroot创build一个虚拟主机。 写一个重写规则,而不是别名。