在 Apache/local 中,如何同时支持目录访问和命名主机访问?

在 Apache/local 中,如何同时支持目录访问和命名主机访问?

我理解如何使用 Directory 和(我认为)VirtualHost 指令。我还理解我不能混合使用它们(尽管我可以嵌套它们)。当我混合使用它们时,对于以前可以使用的 Directory 类型 URL,我会得到 404 not found 错误。

那么,如何才能在我的配置文件中支持浏览“localhost/my/website”和“mydomainname.com”这两个 URL 呢?

我的理由是:我想让 mydomainname.com 使用 https,同时让其他网站使用 http。我的 HOSTS 文件 (我的本地 DNS) 中已将 mydomainname.com 转换为 127.0.0.1,因此我认为我一定快找到解决方案了。

我已经为此工作了好几个小时,但并没有取得任何进展。Apache 文档对我没有帮助。

理想情况下,有人可以为我勾勒出如何实现我的目标。

答案1

根据这个问题,我认为你不明白Directory和之间的区别VirtualHost

<Directory></Directory>用于括起一组仅适用于命名目录、该目录的子目录以及相应目录中的文件的指令。

<VirtualHost>并用于封装一组仅适用于特定虚拟主机的指令。可以使用虚拟主机上下文中允许的任何指令。当服务器收到对特定虚拟主机上的文档的请求时,它会使用该部分</VirtualHost>中封装的配置指令。<VirtualHost>

<Directory>指令不控制“目录类型 URL”。DocumentRootAlias指令控制在文件系统中查找内容的位置。这些指令可以直接在服务器配置中使用,也可以在 中使用<VirtualHost>

对于您想要实现的目标,您只需要两个<VirtualHost>不同的 s DocumentRoot,例如

Listen 80
<VirtualHost *:80>
    DocumentRoot "/var/www"
    ServerName localhost
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/var/www/examplecom"
    ServerName example.com
</VirtualHost>

现在,您已为同一个网站创建了http://localhost/examplecom/http://example.com/。如果网站不都在同一个文件系统目录下,则需要使用Aliases,例如

Listen 80
<VirtualHost *:80>
    DocumentRoot "/var/www"
    ServerName localhost

    Alias "/examplecom" "/home/user/sites/example.com"
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/home/user/sites/example.com"
    ServerName example.com
</VirtualHost>

相关内容