在 Ubuntu 16.04 中更改文档根目录的问题

在 Ubuntu 16.04 中更改文档根目录的问题

我最近从 Windows 转到了 Ubuntu 16.04,并尝试设置 Web 开发环境。我成功安装了 apache、mysql 和 php,并且 html 和 php(通过 sudo nano 创建了一个测试脚本)都完美地呈现了出来/var/www

然后我尝试通过 sublime text 在目录中创建一个新文件,/var/www结果发现保存文件时出现拒绝访问错误。因此,我找到了一篇关于权限等的新文章,我意识到修改该目录的权限可能不是一个好主意。

我查阅了有关如何将 apache 文档根目录移到其他地方的文章。然后我在下创建了一个新的项目/web 目录,/home/user并更改了中的 DocumentRoot /etc/apache2/sites-available/000-default.conf(我使用的是 apache 2.4.18)。我在中做了相关更改/etc/apache2/apache2.conf以更改<Directory>路径。重新启动 apache 后,DocuemntRoot更改了,但它没有呈现任何 php。即使是之前通过 url 工作的 phpmyadminhttp://localhost/phpmyadmin不再起作用。

  • 在 /etc/apache2/sites-available/000-default.conf 中更改
    DocumentRoot /var/www/html
    为:
    DocumentRoot /home/{user}/projects/web

  • 在 /etc/apache2/apache2.conf 中更改
    <Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
    为:
    <Directory /home/{user}/projects/web/> Options Indexes FollowSymLinks AllowOverride None Require all granted</Directory>

有人能帮助我如何更改 DocumentRoot 并且仍让 php 和 phpmyadmin 正常工作吗?

答案1

首先修复损坏的 Apache2

您显然已经破坏了 Apache2。您应该使用默认主机设置,并为您想要的自定义根目录创建虚拟主机。删除或重命名您已编辑的配置文件并恢复原始文件。

使用默认000-default.conf文件作为模板。将其复制到您的虚拟主机的名称并修改您的自定义文件。

您可以按照以下步骤重命名文件:

$ cd /etc/apache2/sites-available
$ sudo mv 000-default.conf mysite.conf
$ cd /etc/apache2
$ sudo mv apache2.conf apache2.conf.test

现在使用此命令行恢复默认文件:

$ sudo apt -o Dpkg::Options::="--force-confmiss" install --reinstall apache2

现在创建您的虚拟主机“mysite.com”。您可以将 替换/home/web/mysite为任何目录。根据您的情况,您可以使用/home/{user}/projects/web

$ cd /etc/apache2/sites-available
$ sudo cp 000-default.conf mysite.conf
$ sudo mkdir -p /home/web/mysite/www
$ sudo mkdir -p /home/web/mysite/log

如果我的站点主机不存在,请使用以下命令在本地创建它:

$ gksudo gedit /etc/hosts

将其添加到hosts文件中:

127.0.0.1  mysite.com

现在编辑您的我的站点配置文件文件指向你的文档根目录选择。

$ pksudo gedit /etc/apache2/sites-available/mysite.conf

对此文件进行以下更改。这是该000-default.conf文件与您新创建的mysite.conf文件之间的差异。差异在大胆的类型。

<虚拟主机 *:80>
        # ServerName 指令设置请求方案、主机名和端口
        # 服务器用来标识自己。这在创建时使用
        # 重定向 URL。在虚拟主机上下文中,ServerName
        # 指定请求的 Host: 标头中必须出现的主机名
        # 匹配此虚拟主机。对于默认虚拟主机(此文件),此
        # 值不是决定性的,因为无论如何它都被用作最后的手段主机。
        # 但是,您必须为任何其他虚拟主机明确设置它。
        服务器名称 mysite.com

        ServerAdmin webmaster@localhost
        DocumentRoot /home/web/mysite/www


        <目录 />
                选项 +FollowSymLinks +ExecCGI +Includes
                要求所有已授予
        </目录>


        # 可用的日志级别:trace8,...,trace1,debug,info,notice,warn,
        # 错误,严重,警报,紧急。
        # 也可以为特定
        # 模块,例如
        #日志级别 info ssl:warn

        错误日志 /home/web/mysite/log/error.log
        CustomLog /home/web/mysite//access.log 合并

        # 对于 conf-available/ 中的大多数配置文件,它们是
        # 在全球范围内启用或禁用,可以
        # 只包含一个特定虚拟主机的行。例如
        # 以下行仅为该主机启用 CGI 配置
        # 在使用“a2disconf”全局禁用它之后。
        #包括conf-available/serve-cgi-bin.conf
</虚拟主机>

# vim: 语法=apache ts=4 sw=4 sts=4 sr noet

现在使用以下命令启用新站点:

$ sudo a2ensite mysite.conf

当对阿帕奇配置文件使用以下命令重新启动服务:

$ sudo systemctl restart apache2

对 VirtualHost 的目录和文件的写入权限:

您可以使用命令chownchgrp更改 的文件和文件夹的所有者/home/web/mysite/www。如果它们归您的用户 ID 所有,您将拥有对文件和文件夹的读写权限。

您还可以创建特定的团体并将用户添加到特定组,以便该组的用户对文件和文件夹具有读/写访问权限。

与授予其他用户对您空间中的文件和文件夹的组访问权限相比,使用后一种考虑可能是一种更好的安全选择/home

相关内容