我的网络服务器文件系统等同于以下内容:
/master-domain.tld
/master-domain.tld/assets/js/foo.js
/master-domain.tld/assets/css/bar.css
/sub1.master-domain.tld
/sub1.master-domain.tld/assets/js/foo.js
/sub2.master-domain.tld
/sub1.master-domain.tld/assets/css/bar.css
...
我想知道的是如何将我的公共(public)静态 Assets (托管在主域上)提供给我的子域——原因是我只需要维护一组“主” Assets ,而不是每次我编辑它们时,更新/复制任何文件到所有其他子域。显然这可以使用绝对 URL 来实现,但我的目标是避免这些,以便我的本地/开发系统在我设计/调试时不需要进行任何远程调用。
目前,我为每个子域设置了一个 mod_rewrite + 符号链接(symbolic link) + php 脚本组合,将对不存在的本地 Assets 的任何调用链接到主 Assets 。例如调用“/sub1.master-domain.tld/assets/css/bar.css”将检索托管在 master 域上的 bar.css 文件,因为 bar.css 的本地版本不存在。此外,调用“/sub1.master-domain.tld/assets/js/foo.js”将提供 local 版本的 foo.js,因为它确实存在。
但我目前的方法似乎阻碍了我的页面加载性能,我想知道是否有更好的(仍然是模块化的)方法来解决这个问题。
有什么建议吗?我是不是以完全错误的方式解决了这个问题?
最佳答案
如果它们都在同一台服务器上,则符号链接(symbolic link)应该是所有必需的。这应该不会对性能造成任何影响。例如。
/sub1.master-domain.tld/assets -> /master-domain.tld/assets
如果您的子域由多个服务器提供服务,我会设置一个 mod_rewrite 规则,其中包含 302 重定向到主域上的完整 URL。在那个主域服务器上,我会设置 mod_expires 以便缓存 Assets ,避免大多数后续请求对子域上相同的“丢失” Assets 。
关于php - 跨(子域?)维护 Assets 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7311930/