我有一个装满网站的文件夹:/var/www
我有一个域名:example.com
我想在我的文件中编写一条规则httpd.conf
,为每个站点设置一个别名/var/www
。
例如:/var/www/hello/public
可以通过 访问example.com/hello
。
目前,我只是为每个站点手动编写别名定义:Alias /hello "/var/www/hello/public/"
答案1
最简单的解决方案是使用mod_vhost_alias相反。它不做确切地正如您所描述的,但非常接近。
- 使用您的发行版所偏好的任何技术来启用
vhost_alias_module
(a2enmod vhost_alias
在基于 Debian 的发行版上)。 将这些指令添加到
httpd.conf
:UseCanonicalName Off VirtualDocumentRoot /var/www/%1/public
为 example.com 创建通配符 DNS 条目,以便 example.com 的任何子域都指向您的服务器。
现在访问“hello.example.com”将加载位于的站点/var/www/hello/public
。
或者,正如 Gabor 所提到的,你可以使用mod_rewrite我将要概述的解决方案假设您在 example.com 下没有其他内容。
- 使能够mod_rewrite使用您的发行版所喜欢的任何机制(
a2enmod rewrite
在基于 Debian 的发行版上)。 将这些指令添加到
VirtualHost
example.com:RewriteEngine On RewriteRule ^([^/]+)(.*) /var/www/$1/public/$2
这会将对“example.com/hello/steve”的请求重写为/var/www/hello/public/steve
。
答案2
为您的域和 webroot 创建 vhost。编写重写规则而不是别名。