我有一个在VirtualBox环境中运行的Ubuntu 12.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
也可以随时使用 Alias
.Apache是灵活的。
因此,您似乎面临的是配置问题。而已。仅此而已。 只需找到配置文件并根据需要进行调整,一切都应该很好。
意思是,当您运行以下命令时,您会看到什么,列出sites-available
:
ls -la /etc/apache2/sites-available
与这个命令相比,sites-enabled
:
ls -la /etc/apache2/sites-enabled
sites-available
的内容是真实的配置文件。sites-enabled
中的项目只是指向 sites-available
中的文件的符号链接。所以当你这样说时:
默认值现在为 000-default.conf。
你可能会混淆。由于sites-enabled
中的000-default.conf
只是一个符号链接,指向 Apache 实际读取配置的sites-available
default
。例如,我所在的 Ubuntu 12.04 服务器上的sites-available
内容是:
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
那么在sites-enabled
中它是:
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
编辑:似乎原始海报在sites-enabled
中没有000-default
。因此,可以使用如下所示的新符号链接来修复此问题:
sudo ln -s /etc/apache2/sites-available/default /etc/apache2/sites-enabled/000-default
然后使用sudo service apache2 restart
重新启动 Apache 并重试。希望这就是问题所在。 请注意,当default
作为符号链接sites-enabled
时,000-default
重命名的原因是确保这是加载的第一个配置。