基于目录的多个文档根?

时间:2015-03-08 21:21:38

标签: apache ubuntu configuration directory document-root

我的服务器结构如下:

|- var
   |-- www
       |--- website1
       |--- website2
       |--- website3

我目前正在处理website1,但我发现当我提交一个Ajax表单时,它会返回以下错误:

http://www.website.com/signup: The requested URL /signup was not found on this server.

应该在http://www.website.com/website1/signup下查看。

以下是我目前在apache2.conf中添加的内容:

Alias /website1 "/var/www/website1/public"
<Directory /var/www/website1>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

我的DocumentRoot在我的VirtualHosts中设置为/var/www。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

这不起作用。您将Alias指令与Virtual Host混淆了。

您所谓的www.website1.com是主机名,而不是网址的目录部分。因此Alias指令不会捕获。 Alias指令允许您通过Alias /folder1 ...之类的指令将http://www.website.com/folder1之类的内容映射到本地文件系统中的任意位置。不多。它没有看到请求的主机,因为它位于内部主机配置中。

相反,您需要为要为其提供内容的每个主机名/域名使用虚拟主机。如果您还没有设置虚拟主机,那么http服务器将回退到默认主机,即您所谓的www.website.com。 apache http服务器的所有选项都以优异的质量记录。我建议您查看该文档:http://httpd.apache.org/docs/2.2/vhosts/


准确地说:你所描述的可以实际上是通过网址重写来完成的。但这将是一种痛苦而且非常不透明。虚拟主机是可行的方法。

答案 1 :(得分:1)

您必须使用Apache的虚拟主机。

在Apache配置中:

# Ensure that Apache listens on port 80
Listen 80

# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.example.com

# Other directives here

</VirtualHost>

<VirtualHost *:80>
DocumentRoot /www/example2
ServerName www.example.org

# Other directives here

</VirtualHost>