我理解如何使用 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”。这DocumentRoot
和Alias
指令控制在文件系统中查找内容的位置。这些指令可以直接在服务器配置中使用,也可以在 中使用<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/
。如果网站不都在同一个文件系统目录下,则需要使用Alias
es,例如
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>