使用 Apache 我可以设置一个目录来从另一个目录提取内容

使用 Apache 我可以设置一个目录来从另一个目录提取内容

我在 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 文档根目录之外的文件系统路径。

相关内容