在单个 Apache 实例中创建多个站点

在单个 Apache 实例中创建多个站点

我需要在 Apache 中拥有多个本地站点。因此我为每个站点添加一个虚拟主机:

#/etc/apache2/sites-available/example.com:
<VirtualHost 127.0.0.1:80>
        ServerAdmin [email protected]
        ServerName  www.example.com
        ServerAlias example.com

        # Indexes + Directory Root.
        DirectoryIndex index.php
        DocumentRoot /var/www/example.com/htdocs/

        # CGI Directory
        ScriptAlias /cgi-bin/ /var/www/example.com/cgi-bin/
        <Location /cgi-bin>
                Options +ExecCGI
        </Location>


        # Logfiles
        ErrorLog  /var/www/example.com/logs/error.log
        CustomLog /var/www/example.com/logs/access.log combined
</VirtualHost>

然后我执行sudo a2ensite example.comsudo service apache2 restart。问题是根相对路径不起作用。例如,当我说<link href="/css/somefile.css" rel="stylesheet">中的某个地方时/var/www/example.com/htdocs/index.php,apache 无法/var/www/example.com/htdocs/css/somefile.css为浏览器提供服务(浏览:localhost/example.com/htdocs

我遗漏了什么?

答案1

我认为问题在于您使用 localhost/example.com/htdocs 访问该网站

您可以执行以下操作:

在您的 vhost 配置中切换 ServerName 和 ServerAlias:

ServerName  example.com
ServerAlias www.example.com

使用以下命令重新启动 apache2:

sudo /etc/init.d/apache2 restart

现在在 /etc/hosts 中添加两行:

127.0.0.1 example.com
127.0.0.1 www.example.com

您现在应该能够通过 www.example.com 或 example.com 访问该网站。(如果您在安装了 Apache 的同一台计算机上工作,则此方法有效)

你的路径应该可以按预期工作。

如果您有任何问题,请发表评论。

答案2

啊!我想我明白你的问题了...

链接标签可以使用完整路径,但完整路径从文档根目录开始:

<link href="/css/somefile.css" .../>

磁盘上的完整路径(/var/www/example.com/htdocs/css/somefile.css)确实不起作用。

Apache 所做的是这样的:

DocumentRoot /var/www/example.com/htdocs/
+
<link href="/css/somefile.css" .../>
=
/var/www/example.com/htdocs/css/somefile.css

就网站而言,DocumentRoot 是某种虚拟根 (/) 目录。这可以防止访问者访问他们永远无权访问的文件(例如/etc/passwd:)

相关内容