我在公司内联网上设置了许多子域名。我手动设置了每个子域名。我希望某些子域名能够自动创建。
例如,如果我有 /home/jason/foo 和 /home/jason/bar,我希望能够转到 foo.jason.mydomain.local 和 bar.jason.mydomain.local,而无需手动设置这些子域。(“jason”部分可以硬编码;我只希望“foo”/“bar”部分是自动的。)
我发现这一页,这似乎正是我想要的,但我无法弥合他们的示例和我正在做的事情之间的差距。有人能帮帮我吗?
谢谢,杰森
答案1
我已经回答了我自己的问题。
以下是我在 Apache 配置中输入的内容:
<VirtualHost *:80>
VirtualDocumentRoot /var/www/hosts/%0
ServerName jason.mydomain.local
ServerAlias *.jason.mydomain.local
</VirtualHost>
然后,我在 /var/www/hosts 中放置了一个名为 jason.mydomain.local 的目录。这就够了。
答案2
在示例中...他们正在使用 FQDN...并设置从子文件夹提取的默认站点。基本上...任何投递到该 IP 的内容都会查找名称与 DNS 名称匹配的文件夹。即 test.local.com 将解析为 /somewhere/test.local.com/
我不是 100% 确定...但我相信任何没有 /somewhere/_______/ 文件夹的站点都会出现错误...而不是默认网站。
实际上有几种不同的方法来实现它。(如您链接的页面中所述)
使用 mod_rewrite... 将有效地将 URL 重写为与预期不同的路径。例如,test.somewhere.com 会将地址重写为类似 www.something.com/test.something.com/ 的内容(您可以使其双向工作,以便最终用户永远不会看到 domain.com/sub-domain.com URL...但是对于权限和此类 apache 会这样看待它。)使用该模型...您将在该站点的文档根目录中有一个 sub-domain.com 文件夹(或别名)。
使用 mod_vhost_alias 的工作原理类似...但它做出的假设可能并不总是有效。即我不认为你可以有一个“默认”根....所有不匹配的内容都会被转储到其中。但 test.domain.com 和 test2.domain.com 会分别自动映射到 /somedirectory/test.domain.com 和 /somedirectory/test2.domain.com。
需要注意的关键是配置中使用的变量。$0 转换为所请求站点的完整域名。例如,VirtualDocumentRoot /www/%0/ 会自动将您转储到 /www/some.domain.com/ 目录(如果浏览到 some.domain.com)并且 mod-rewrite 会对其进行模式匹配并将路径重写到任何目录。