我在Apache服务器上的2个环境中有一个应用程序。 一个是“dev”,它是生产环境的一个子域。 这是一个内容pipe理的应用程序,用户上传媒体。 我希望能够使用相同的媒体更新某些区域的“开发”网站内容。
有没有办法让我的/dev/uploads
目录利用/prod/uploads
目录中的媒体(recursion)而不必复制内容? (想要保持磁盘空间不变)。
如果我的开发应用程序调用http://dev.mysite.com/uploads/img.jpg
媒体实际上应该从http://mysite.com/uploads.img.jpg
拉。 我也在使用.htaccess文件重写,因为这是一个ZF应用程序。
1)将开发DocumentRoot
的部分符号链接到要开发链接的生产文档根目录。
ln -s /prod/uploads/img.jpg /dev/uploads/img.jpg
确保httpd.conf
的Dev Directory允许通过FollowSymLinks
configuration选项遵循符号链接。
2)重新编写符合您要求从prod提供的要求的dev的URL。 你的例子的redirect将是这样的;
RewriteCond %{HTTP_HOST} dev.mysite\.com [NC] RewriteCond %{REQUEST_URI} /uploads/img.jpg RewriteRule http://mysite.com/uploads/img.jpg
PS这是一个伪代码的例子,而不是你想要实现的东西,除非它只是你关心的一个资产。
3)使用Alias
configuration将一个目录映射到另一个。
Alias /dev/uploads /prod/uploads
这将为来自/prod/uploads
任何匹配http://dev.mysite/uploads的传入path提供服务。 非常依赖于你特定的httpd.confconfiguration的变幻莫测。
你需要使用mod_rewrite
来检查dev中的文件是否存在,如果存在则发送请求 – 如果不存在则发送。 就像是..
RewriteCond /path/to/dev/docroot/${REQUEST_URI} -f # Exists in dev, leave the request alone RewriteRule ^(.*)$ - # Doesn't exist, send to prod RewriteRule ^(.*)$ /path/to/prod/docroot/$1
请注意,这需要在dev <VirtualHost>
上下文中configuration才能正常工作,因为目标是dev文档根目录之外的文件系统path。