我在 Apache 服务器上的 2 个环境中有一个应用程序。一个是“dev”,它是生产环境的子域。这是一个内容管理应用程序,用户可以上传媒体。我希望某些区域的“dev”站点内容能够使用相同的媒体进行更新。
有没有办法让我的/dev/uploads
目录利用/prod/uploads
目录中的媒体(递归),而不必复制内容?(想要减少磁盘空间)。
如果我的开发应用程序调用,则http://dev.mysite.com/uploads/img.jpg
应该实际从中提取媒体http://mysite.com/uploads.img.jpg
。我也已经在 .htaccess 文件中使用重写,因为这是一个 ZF 应用程序。
答案1
1)将开发的各个部分符号链接DocumentRoot
到您希望开发链接服务的生产文档根目录。
ln -s /prod/uploads/img.jpg /dev/uploads/img.jpg
确保httpd.conf
允许 Dev Directory 通过配置选项跟踪符号链接FollowSymLinks
。
2) 重写符合您要求的开发 URL,以便从生产环境中提供服务。您的示例的重定向将如下所示;
RewriteCond %{HTTP_HOST} dev.mysite\.com [NC]
RewriteCond %{REQUEST_URI} /uploads/img.jpg
RewriteRule http://mysite.com/uploads/img.jpg
PS 这更像是一个伪代码示例,而不是您想要实现的东西,除非它只是您关心的一项资产。
3)使用Alias
配置将一个目录映射到另一个目录。
Alias /dev/uploads /prod/uploads
这将服务于匹配的任何传入路径http://dev.mysite/uploads来自/prod/uploads
。很大程度上取决于您的特定 httpd.conf 配置的变化。
答案2
您将需要使用mod_rewrite
它来检查 dev 中的文件是否存在,如果存在则将请求发送到 dev,如果不存在则发送到 prod。类似...
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>
上下文中进行配置才能运行,因为目标是 dev 文档根目录之外的文件系统路径。