我该如何更改Apache服务器的根目录?

281

我如何更改Apache服务器的文档根目录?基本上,我希望localhost的根目录是/users/spencer/projects目录,而不是/var/www


最终我找到了解决方法。有些人建议我更改httpd.conf文件,但我最终在/etc/apache2/sites-available/default文件中找到了并将根目录从/var/www更改为/home/myusername/projects_folder,这样就可以了。


3
这篇文章已经被浏览了815k次,但我从未被Stack Overflow的管理员封锁过。许多Stack Overflow用户必须处理Apache,因为它是他们所编写程序的分发方式。由于它与SO所涉及的领域如此接近,我甚至不会考虑将其关闭,因为它被认为是离题的。 - clankill3r
15个回答

292
请注意,这仅适用于Ubuntu 14.04 LTS(Trusty Tahr)和更新版本。
在我的Ubuntu 14.04 LTS中,文档根目录设置为/var/www/html。它在以下文件中配置:
/etc/apache2/sites-available/000-default.conf

那就只需执行

sudo nano /etc/apache2/sites-available/000-default.conf

并将以下行更改为您想要的内容:
DocumentRoot /var/www/html

也执行一个

sudo nano /etc/apache2/apache2.conf

并找到这个:

<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>

/var/www/html更改为您喜欢的目录并保存。

保存更改后,只需重新启动Apache 2 Web服务器即可完成:)

sudo service apache2 restart

如果您更喜欢图形化的文本编辑器,可以将sudo nano替换为gksu gedit

1
@Paul Lo:我还没有在Ubuntu 13.10上尝试过这个,只在Ubuntu 14.04上尝试过;因为我很确定第一次设置apache时(那是在Ubuntu 12.04上),没有这样的目录。所以,是的,我猜想这仅适用于Ubuntu 14.04 LTS及更高版本。但是,您可以查看其他答案。点赞表明它们帮助了其他人,也许它们也适用于Ubuntu 13.10。 - mozzbozz
1
不过还是谢谢你的提问,我刚刚将这些信息编辑到答案中,以免其他人陷入尝试在旧版Ubuntu上进行此操作的陷阱中。 (y) - mozzbozz
3
@mozzbozzm,你是正确的。只有14.04版本才会默认将var/www/html作为根目录,这真是一个奇怪的选择。他们难道就是想浪费人们的时间吗? :) - davidkonrad
4
当我在浏览器中输入localhost:80时,出现了“您没有权限访问此服务器上的/”的禁止错误。我需要更改端口吗? - Costa Michailidis
3
我会尽力完成您的翻译要求。以下是需要翻译的内容:@Costa I solved the problem by adding
`<Directory path_to_directory> Options Indexes FollowSymLinks AllowOverride None Require all granted</Directory> `在/etc/apache2/apache2.conf中添加上述代码段后,问题得到了解决。
- Keenan Gebze
显示剩余8条评论

230

你需要在你的httpd.conf文件中更改DocumentRoot设置。很可能它会在类似于/etc/apache2/conf/httpd.conf的某个位置下。

使用你喜欢的编辑器(我推荐Vim),查找DocumentRoot并将其更改为/users/spencer/projects。还要注意一下设置,看起来像这样:

<Directory "/var/www">
你还需要更改引号中的内容以匹配你的新目录。这样,当用户请求它时,Apache就可以访问并读取该目录。 现在重新启动你的Apache服务 (httpd -k restart),然后你就可以开始了。 Apache 2网站配置文件通常保存在/etc/apache2/sites-available/中(适用于Debian、Ubuntu等系统)。

8
我打开了 /etc/apache2/httpd.conf 文件,但是发现它是空白的。我正在使用 gedit 打开它。 - Spencer Cooley
4
根据你使用的Linux版本不同,该文件可能位于/etc/httpd/conf/httpd.conf中。 - Chris Henry
4
httpd.conf 文件为空,但我在 etc/apache2/sites-available/default 找到了一个文件,并在那里更改了根目录。我可能应该提到这不是在实际的服务器上。我正在设置本地开发环境。不确定这是否有影响。 - Spencer Cooley
4
能否同时启用 /var/www 和 /home/myusername/projects_folder?如何进行配置?谢谢。 - Paul Lo
6
“答案”实际上已经过时了。根据Ubuntu 18.x文档,正确的答案是将Apache的根目录更改或将项目移动到/var/www/html。要更改Apache的根目录,请运行:cd /etc/apache2/sites-available。然后使用命令打开000-default.conf文件:nano 000-default.conf。 编辑DocumentRoot选项:DocumentRoot /path/to/my/project。(请参见https://askubuntu.com/questions/337874/change-apache-document-root-folder-to-secondary-hard-drive) - sea26.2
显示剩余10条评论

45

我必须编辑/etc/apache2/sites-available/default文件。这些行的内容与RDL提到的相同


3
@pabloab建议编辑说:“Apache 2.4及以上版本需要在结尾处添加.conf,并且默认情况下前缀为000-。”结果应该是/etc/apache2/sites-available/000-default.conf。我没有测试过,但这可能对某些人有所帮助。 - Nick
^^这个解决了。我在哪里可以找到文档说明我的sites-available文件需要以.conf结尾?!?更新后,我有大约20个虚拟主机被禁用并脱机,经过几个小时的查找,重命名我的sites-available文件后问题得到解决。 - James Perih
要在用户目录中运行Apache,您需要将用户添加到Apache组和将Apache添加到用户组。我建议在答案中添加以下3个命令:使用您的用户名打开终端并运行:sudo usermod -a -G www-data $ USER; sudo adduser $ USER www-data; sudo adduser www-data $ USER; - Cesar Devesa

32

这是针对Ubuntu 14.04(Trusty Tahr)的:

在文件/etc/apache2/apache2.conf中,应该如下所示,不包含目录名称:

<Directory /home/username>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

在文件/etc/apache2/sites-available/000-default.conf中,您应该包含自定义目录名称,即www
DocumentRoot /home/username/www

如果不是如上所述,加载服务器时会出现错误:

禁止访问 您没有权限访问此服务器上的 /


谢谢伙计 :) 这在我的Ubuntu 16.04上起作用了。 - Magesh Kumaar
2
它也在Debian 8上运行良好。 - androsfat
“Without the directory name” 是什么意思? - Peter Mortensen
1
要在用户目录中运行Apache,您需要将用户添加到Apache组和Apache添加到用户组中。我建议将以下3个命令添加到答案中:使用您的用户打开终端并运行:sudo usermod -a -G www-data $USER; sudo adduser $USER www-data; sudo adduser www-data $USER; - Cesar Devesa
完美的解决方案,谢谢! - Karra Max

22

在Apache 2下更改目录或从不同端口的多个目录运行的正确方法如下:

对于Apache 2,配置文件位于/etc/apache2,不像旧版本那样使用单个配置文件,而是拆分为较小的配置文件,其中/etc/apache2/apache2.conf是主要的配置文件。为了从其他目录提供文件,我们需要一个新的虚拟主机(conf)文件。虚拟主机配置文件位于/etc/apache2/sites-available(不要编辑sites-enabled中的文件)。默认的Apache安装使用虚拟主机配置文件000-default.conf

首先通过复制Apache默认安装使用的默认虚拟主机文件(即在localhost上以端口80运行的文件)来创建一个新的虚拟主机文件。进入/etc/apache2/sites-available目录,然后通过sudo cp 000-default.conf example.com.conf进行复制,现在通过sudo gedit example.com.conf 编辑该文件如下:

<VirtualHost *:80>
    ServerAdmin example@localhost
    DocumentRoot /home/ubuntu/example.com
</VirtualHost>

为了简洁起见,我删除了上面文件中的非重要行。在这里,DocumentRoot是指网站文件将要提供服务的目录路径,比如index.html

创建你想要提供文件服务的目录,例如,mkdir example.com并更改该目录的所有者和默认组。例如,如果您登录的用户名是ubuntu,则可以通过命令sudo chown ubuntu:www-data example.com更改权限。这将授予用户ubuntu完全访问权限,并允许组www-data具有读取和执行访问权限。

现在,通过发出命令sudo gedit apache2.conf编辑Apache配置文件/etc/apache2/apache2.conf,并查找以下行: <Directory /var/www/>,然后在结束标签</Directory>下添加以下内容:

<Directory /home/ubuntu/example.com>
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
</Directory>

现在有两个命令用于启用或禁用虚拟主机配置文件,分别是a2ensitea2dissite。由于我们的example.com.conf文件使用与默认配置文件000-default.conf相同的端口(80),因此我们必须通过输入命令sudo a2dissite 000-default.conf禁用默认配置文件,并通过sudo a2ensite example.com.conf启用我们的虚拟主机配置文件。

现在使用命令sudo service apache2 restart重新启动或重新加载服务器。现在Apache会在默认端口80上的localhost上从example.com目录中提供文件。

a2ensite命令基本上创建了一个符号链接到站点启用目录下的配置文件。

请勿编辑 sites-enabled(或 *-enabled) 目录中的文件,如此答案所述。

更改端口并在不同端口的多个目录中运行:

如果您需要在不同的端口上运行目录,请将端口号从80更改为8080,并编辑虚拟主机文件:

<VirtualHost *:8080>
    ServerAdmin user@localhost
    DocumentRoot /home/ubuntu/work
</VirtualHost>

并编辑/etc/apache2/ports.conf,在Listen 80下面添加Listen 8080

现在我们可以启用默认的虚拟主机配置文件,该文件在端口80上运行,因为example.com目录使用端口8080,所以运行命令sudo a2ensite 000-default.conf.

现在使用命令sudo service apache2 restart重新启动或重新加载服务器。现在两个目录都可以从localhostlocalhost:8080访问。


要在用户目录中运行Apache,您需要将用户添加到Apache组和Apache添加到用户组中。我建议将以下3个命令添加到答案中:使用您的用户打开终端并运行:sudo usermod -a -G www-data $USER; sudo adduser $USER www-data; sudo adduser www-data $USER; - Cesar Devesa

4
如果您找不到 http.conf 文件并且按照 Nick 的方法 操作后,使用 sudo service apache2 restart 命令重启 Apache。

4
我曾使用LAMP,想要更改文档根文件夹,于是我编辑了/etc/apache2/sites-available文件夹中的default文件。
如果您也想这么做,只需按以下方式进行编辑:
DocumentRoot /home/username/new_root_folder
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /home/username/new_root_folder>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

在此之后,如果您在浏览器中键入“localhost”,它将加载/home/username/new_root_folder的内容。

文件名是什么?000-default.conf - Peter Mortensen
要在用户目录中运行Apache,您需要将用户添加到Apache组和Apache添加到用户组中。我建议将以下3个命令添加到答案中:使用您的用户打开终端并运行:sudo usermod -a -G www-data $USER; sudo adduser $USER www-data; sudo adduser www-data $USER; - Cesar Devesa

4

对于在Linux Mint 17.3 Cinnamon 64位上的Apache 2,以下操作可行:

  1. In /etc/apache2/sites-available/ open the 000-default.conf file, and change the Document Root to the absolute path of your directory.

    sudo vim /etc/apache2/sites-available/000-default.conf

  2. In folder /etc/apache2/ open file httpd.conf, and add a <Directory> tag referencing your directory and containing the exact same settings as the tag for var/www.

     sudo vim /etc/apache2/apache2.conf
    

    On my machine it looked like this:


     <Directory /home/my_user_name/php/>
             Options Indexes FollowSymLinks
             AllowOverride All
             Require all granted
     </Directory>
    

注意: 在第一步中,您可能需要为了SSL目的更改default-ssl.conf文件中的文档根目录。但据我所知,这不是运行一般开发环境所必需的。


3
在Apache 2.4.18 (Ubuntu)版本中:
1. 打开文件/etc/apache2/apache2.conf,搜索 <Directory /var/www/>,将其替换为您的目录。 2. 打开文件/etc/apache2/sites-available/000-default.conf,搜索 DocumentRoot /var/www/html,将其替换为您的 DocumentRoot。

我已经做了这两件事情,但它仍然显示“禁止访问,您没有权限在此服务器上访问/”。 - Programmer
1
请检查您的文件夹权限是否不在您的主目录中。 - habibun

3
以下适用于 Ubuntu 14.04(Trusty Tahr)及更高版本。在进行任何更改之前,请确保备份以下文件。
  1. 打开 /etc/apache2/apache2.conf 文件,搜索 <Directory /var/www/> 指令,并将路径更改为 /home/<USERNAME>/public_html。您可以使用 * 代替 .。

  2. 打开 /etc/apache2/sites-available/000-default.conf 文件,将 DocumentRoot 值属性从 /var/www/html 更改为 /home/<USERNAME>/public_html。还要将 <Directory /var/www/html> 更改为 <Directory /home/<USERNAME>/public_html

  3. 打开 /etc/mods-available/php7.1.conf 文件。找到并注释掉以下代码:

    php_admin_flag engine Off
请勿打开 php_admin_flag engine OFF 标志,因为指令代码上方的注释中已经提到了原因。此外,PHP 版本可以是 5.0、7.0 或您安装的任何版本。
home/<USERNAME> 中创建 public_html 目录。
通过执行命令 sudo service apache2 restart 重新启动 Apache 服务。
通过在服务器上运行示例脚本进行测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接