0

假设我开发了一个网站,假设它的域为 foo.bar。

让我们进一步假设我有一个名为 lorem 的用户和一个名为 ipsum 的用户。我想为 lorem 创建一个 lorem.foo.bar 的 URL,为 ipsum 创建一个 ipsum.foo.bar 的 URL。我可以使用哪些可能的技术来实现这一目标?你们能举出任何实现这一目标的技术的例子吗?

非常感谢。

4

1 回答 1

1

根据您的需要,我发现这种方法是最直接的。

以我的经验,做你想做的事情的最好方法是通过在你的 DNS 服务器上配置的通配符域。在您的示例中, *.foo.bar 将是您的 foo.bar 域的通配符。通常这些是在 A 记录上设置的,但可以在 MX 记录等上设置。这里唯一真正的要求是您的 DNS 服务器支持通配符域。

就 Web 服务器而言,您将需要使用某种 URL 重写技术,以便 lorem.foo.bar 显示 lorem 页面等等。重写 URL 有几种技术。在 Apache 上,您可以配置 VirtualHosts 或使用 mod_rewrite。同样,在 IIS 上,有几种方法使用 ISAPI 过滤器,或者您可以使用 ASP.NET MVC 中的 URL 路由来进行重写。

以下是一些相关示例:

使用 Apache VirtualHost 创建通配符子域

.NET 4 中的 URL 重写?

http://support.microsoft.com/kb/840687

http://www.isapirewrite.com/docs/

- 编辑每条评论

在您的 *.foo.bar 示例中,您只会在 DNS 服务器上设置一个通配符域。一旦完成,除非您添加不同的通配符,否则您不必再这样做了。

就 Apache 而言,您应该能够做这样的事情(我很长时间没有使用 Apache,所以这可能有点不准确)

<VirtualHost 0.0.0.0>
   DocumentRoot /www/[directory sub domains are served out of]
   ServerName www.foo.bar
   ServerAlias *.foo.bar
</VirtualHost>

同样,这应该是一次性配置,或者当您添加更多通配符时。从这里您的 PHP(或您使用的任何语言)将需要根据给定的子域来处理它应该显示的内容的实际处理。

--edit 2 用于第二条评论

因此,通配符域允许几乎任何值。在上述情况下,*.foo.bar 将允许 lorem.foo.bar、ipsum.foo.bar、someguy.foo.bar 等,而无需您向 DNS 服务器添加额外的条目或添加额外的 VirtualHost 条目。因此,使用上面的 VirtualHost 配置可以说 DocumentRoot 是 /www/subdomains。当导航到 lorem.foo.bar 或 ipsum.foo.bar 时,两个请求都从 /www/subdomains 文件夹中获得服务,因此那里的代码需要获取子域的名称(在本例中为 lorem 或 ipsum),然后通过查询数据库或您现有的任何其他业务流程来处理这些值。尝试为此进程创建单个目录、DNS 条目和/或 VirtualHost 条目是错误的,因为它将成为绝对的管理噩梦。

于 2013-06-18T01:50:34.983 回答