Php 为什么可以';我不能让Apache2从/var/www以外的目录为站点提供服务吗?

Php 为什么可以';我不能让Apache2从/var/www以外的目录为站点提供服务吗?,php,linux,apache,ubuntu,Php,Linux,Apache,Ubuntu,我有一个运行在VirtualBox环境中的Ubuntu12.04服务器。我用我的Windows系统设置了一个共享文件夹,在我将PHP从5.3.x更新到5.5.12之前,它工作得很好。我使用了一个新的php源代码,因为apt get似乎不允许我升级到5.3.x以上。在此过程中,它还升级了apache2。我最初忽略的一个区别是vhost配置文件不再是默认的或mysite。默认值现在是000-default.conf。apache2.conf仅用于加载以.conf结尾的配置文件的站点 问题不是我得到了

我有一个运行在VirtualBox环境中的Ubuntu12.04服务器。我用我的Windows系统设置了一个共享文件夹,在我将PHP从5.3.x更新到5.5.12之前,它工作得很好。我使用了一个新的php源代码,因为apt get似乎不允许我升级到5.3.x以上。在此过程中,它还升级了apache2。我最初忽略的一个区别是vhost配置文件不再是默认的或mysite。默认值现在是000-default.conf。apache2.conf仅用于加载以.conf结尾的配置文件的站点

问题不是我得到了任何禁止的错误,而是apache忽略了任何指令,告诉它在/var/www位置以外的地方使用文档根。我与VirtualBox的共享目录是/media/sf_sandbox/——这是Ubuntu目录。我禁用了默认站点000-default.conf,并启用了另外两个站点。现在,sandbox.dev使用var/www目录中的文件,而不是共享目录中的文件。它忽略sandbox.conf文件中的指令

我在某个地方读到apache默认情况下只提供/var/www目录中的文件,并且我可能不得不将其他目录列为白名单。它没有说怎么做。apache2.conf文件确实具有从站点可用目录加载*.conf文件的指令。不幸的是,它只是忽略了告诉它文档根在我的站点上的位置的指令。这是在PHP从5.3.x升级到5.5.12之后发生的,这也升级了apache2


如何将其他目录列为白名单,并告诉apache从指定的位置提供文件?

首先,这确实属于。也就是说,你问:

如何列出其他目录并告诉apache提供文件 从指定的位置

Apache没有“白名单”这样的东西。它可以在您系统的任何位置提供内容。即使您有一套
DocumentRoot
,也可以始终使用
别名。Apache是灵活的

因此,您似乎面临的是一个配置问题。没别的了。同样如此。只需找到配置文件并根据需要进行调整&一切都应该很好

也就是说,当您运行这个命令列出可用的站点时,您看到了什么:

ls -la /etc/apache2/sites-available
与启用了
站点的此命令相比

ls -la /etc/apache2/sites-enabled
可用的
站点的内容是真正的配置文件。启用的
站点中的项目
只是指向可用
站点中文件的符号链接
。所以当你这么说的时候:

默认值现在是000-default.conf

你可能弄错了。因为
sites enabled中的
000 default.conf
只是指向
sites available中的
default
的符号链接,Apache实际上从中读取配置。例如,我所在的Ubuntu 12.04服务器上可用的
站点的内容如下:

ls -la /etc/apache2/sites-available

-rw-r--r-- 1 root root  913 Apr 15 16:15 default
-rw-r--r-- 1 root root 7469 Feb 14  2012 default-ssl
然后在
站点中启用
它是:

ls -la /etc/apache2/sites-enabled

lrwxrwxrwx 1 root root   26 Jan 11  2013 000-default -> ../sites-available/default
请注意,
000 default
只是指向
。/sites available/default
的符号链接,基本上是
/etc/apache2/sites available/default

过去,您需要提供更多详细信息或查看配置的位置。您甚至可以尝试运行此命令以查看活动Apache服务器当前正在管理的虚拟主机:

sudo apachectl-S

编辑:原始海报似乎没有在
站点中启用
000默认值
。因此,可以使用如下新的符号链接进行修复:

sudo ln -s /etc/apache2/sites-available/default /etc/apache2/sites-enabled/000-default

然后使用
sudo服务apache2重新启动Apache,然后重试。希望这就是问题所在。请注意,
default
在启用了
站点时被重命名为
000 default
,因为符号链接是为了确保这是加载的第一个配置。

首先,这确实属于on。也就是说,你问:

如何列出其他目录并告诉apache提供文件 从指定的位置

Apache没有“白名单”这样的东西。它可以在您系统的任何位置提供内容。即使您有一套
DocumentRoot
,也可以始终使用
别名。Apache是灵活的

因此,您似乎面临的是一个配置问题。没别的了。同样如此。只需找到配置文件并根据需要进行调整&一切都应该很好

也就是说,当您运行这个命令列出可用的站点时,您看到了什么:

ls -la /etc/apache2/sites-available
与启用了
站点的此命令相比

ls -la /etc/apache2/sites-enabled
可用的
站点的内容是真正的配置文件。启用的
站点中的项目
只是指向可用
站点中文件的符号链接
。所以当你这么说的时候:

默认值现在是000-default.conf

你可能弄错了。因为
sites enabled中的
000 default.conf
只是指向
sites available中的
default
的符号链接,Apache实际上从中读取配置。例如,我所在的Ubuntu 12.04服务器上可用的
站点的内容如下:

ls -la /etc/apache2/sites-available

-rw-r--r-- 1 root root  913 Apr 15 16:15 default
-rw-r--r-- 1 root root 7469 Feb 14  2012 default-ssl
然后在
站点中启用
它是:

ls -la /etc/apache2/sites-enabled

lrwxrwxrwx 1 root root   26 Jan 11  2013 000-default -> ../sites-available/default
请注意,
000 default
只是指向
。/sites available/default
的符号链接,基本上是
/etc/apache2/sites available/default

过去,您需要提供更多详细信息或查看配置的位置。您甚至可以尝试运行此命令以查看活动Apache服务器当前正在管理的虚拟主机:

sudo apachectl-S

编辑:原始海报似乎没有在
站点中启用
000默认值
。因此,可以使用如下新的符号链接进行修复:

sudo ln -s /etc/apache2/sites-available/default /etc/apache2/sites-enabled/000-default
然后使用
sudo服务重新启动apache2