Web编程中的子域与子目录

Ste*_*ini 28 subdomain

在Web上处理多个"应用程序"有两种主要策略:

  • 子域名(例如wiki.example.org,blog.example.org,admin.example.org,api.example.org/v1)
  • 子目录(例如example.org/wiki,example.org/blog,example.org/admin,example.org/api/v1)

在处理Web编程时(例如,在代码组织,浏览器安全模型,javascript等方面),这两种解决方案有何不同(优缺点).

编辑:CW因为有正确的答案,但它非常广泛.

Eve*_*ert 16

除了从安全角度来看,在子域内隔离应用程序要容易一些,我只会评论一下我认为两者之间的最大区别.

子域的专业版:

  • 您可以为每个域隔离配置(例如apache).
  • 将部分应用程序迁移到其他计算机会更容易.子目录不会真正为您提供这种灵活性.
  • 您可以假设应用程序的根始终为/,而不必在每个html模板中使用$ baseUri变量.

缺点:

  • 快速设置登台或临时开发环境会更烦人.对于每个"应用程序",您现在需要DNS主机文件条目和Web服务器配置.使用子目录,您可以将应用程序放在目录中,然后继续!
  • 如果您确实需要在不同的系统上部署应用程序,因为某些奇怪的策略不可能使用/,则可能需要进行一些重写.

我的建议:

确保你可以随时做到这两件事,这将给你两全其美.应用程序的每个部分都应该具有始终受到尊重的可配置基础uri.只要你确保你可以一直双向,那么谁在乎你做什么?它只是一个网址,它总是可以改变.


Pek*_*ica 8

  • 在代码组织方面:差异为零,因为您可以将子域映射到任何目录.
  • 在浏览器安全性方面:跨子域的JavaScript访问是可能的,但有障碍(见document.domain和配合).在使用不同的子域时,我不知道JavaScript方面的任何内容是完全不可能的.

意见:

我个人倾向于目录和公共地址的子域.一般公众习惯于以"www"开头的网址.它会造成不必要的混乱,打破这种模式.您会注意到,当给定子域键入地址栏时,人们通常会自动开始输入"www".他们会惊讶地发现一个地址可能没有.

对我来说,使用子域的唯一好方法是出于内部目的,以促进或准备使用不同的服务器(例如static.example.com,images.example.com等)


Car*_*ers 5

就我个人而言,我更喜欢为每个应用程序使用一个子域,然后使用子目录(无论它们是否实际上是子目录——最好它们只是/index.php通过 .htaccess重新路由到)来表示该应用程序的不同状态。例如:

admin.blah.com/users/1234/bob
admin.blah.com/pages/4321/title
blog.blah.com/archives/2007/5678/title,等。

子站点会告诉你哪里你是和子目录告诉你什么你在干什么。