假设我有一个文件夹 ~/apache/,其中包含两个网站目录:www.website1.com www.website2.com
现在我已经使用 sites-available 和 sites-enabled 配置设置了一些东西,它们将域映射到目录。我希望这样我所要做的就是创建一个新目录并将正确的域指向我的服务器。
说实话,我对服务器配置几乎一无所知。我想我需要一些类似的东西
VirtualDocumentRoot ~/apache/%0
在配置文件中。httpd.conf?apache2.conf?或者最好将其放在单独的配置中并将其包含在主配置中?
答案1
您可以完全放弃基于名称的虚拟托管,关闭所有sites-enabled
文件并输入VirtualDocumentRoot
主服务器配置。
更可能的情况是,您需要做的是创建一个新的虚拟主机sites-available
并将其符号链接到sites-enabled
正常位置,使其充当一个捕获所有文件的角色。命名很重要;它必须是按字母顺序排列的第一个文件,才能被视为默认文件。
所以:
- 创建一个按字母顺序优先加载的文件,并将其视为默认文件,例如
/etc/apache2/sites-available/0-dynamic
。 为新的 vhost 文件提供一些如下内容:
<VirtualHost *:80> ServerName catchall VirtualDocumentRoot /path/to/domains/%0 <Directory /path/to/domains> Order Allow,Deny Allow from all </Directory> </VirtualHost>
- 启用它:
a2ensite 0-dynamic
。 (如果默认值仍为/etc/apache2/sites-enabled/000-default
,请将其重命名,以便按字母顺序排在新的名称之后。)
此配置将提供来自 的动态配置站点,但当该块具有与请求匹配的或时VirtualDocumentRoot
,可以被不同的 覆盖并提供服务。如果您的“统一”虚拟主机的设置不适合特定域,这将很有用。<VirtualHost>
ServerName
ServerAlias
编辑:(添加一些我尝试设置时遇到的可能有帮助的事情。所有荣誉归于原作者!)
虚拟文档根
如果你收到错误信息
Invalid command 'VirtualDocumentRoot', perhaps misspelled...
检查确保 vhost_alias 模块已启用。如果没有,请运行
>sudo a2enmod vhost_alias
处理领先的 www
将以下规则(请务必将示例替换为您的实际域)添加到 0-default 文件以处理 www.example.com 和 example.com。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
在此示例中,所有请求中的 www 都被删除,因此目录应该是 example.com。