如何在同一个域中实现不同的URL启动?

时间:2013-06-17 18:53:41

标签: url subdomain

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

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

非常感谢。

1 个答案:

答案 0 :(得分:1)

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

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

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

以下是一些相关的例子:

Creating Wildcard Sub Domain Using Apache VirtualHost

URL rewriting in .NET 4?

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

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

-Edit per comments

在* .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(或你正在使用的任何语言)需要根据给定的子域处理它应该显示的内容的实际处理。

- 编辑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条目是一个错误,因为它将成为绝对的管理噩梦。在上面的示例中,您只需要担心1个DNS条目,1个VirtualHost条目和一个值得图像,网页,PHP脚本等的目录。