Mod在子域中重写所有丢失的图像

我正在设置一个开发服务器,所以我不再需要直接编辑远程服务器上的文件,并且有版本pipe理的SVN。

由于一些网站的图像很重(3-30gb),我们决定不在SVN存储库中包含图像。

所以我build立了一个给所有子域的虚拟文档根目录的系统,所以http://[user].[domain].testdomain.com得到/working/[user]/[domain]/httpdocs的虚拟文档根这些是所有用户的工作副本。
(我不知道是否相关,但可能是有用的)

然而,为了全面的testing目的,显示图像将是有用的。 dev服务器也作为备份服务器使用,因此所有的镜像都在服务器上。 我想通过一个漂亮的htaccess / PHP脚本组合显示所有缺less的图像。

我目前正在使用这些规则:

 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png)$ RewriteRule (.*) http://testdomain.com/fallback.php?image=$1 [L] 

但是这不能完全按照计划工作,因为我无法从中获取子域信息。 另外,因为redirecturl包含一个完整的域名,所以它被完全redirect,这使得它成为一个额外的http请求。

理想的设置是,所有丢失的图像都来自一个PHP脚本,位于http://testdomain.com/fallback.php ,图像是从原始的URL(如http://me.webshop.testdomain.com/images/header.png ),但我似乎无法得到它的工作。

这甚至有可能吗? 如果是这样,任何指向我应该做的?

ps作为一个奖励,上面提供的规则似乎在user.webshop.testdomain.com域( user.webshop.testdomain.com )上的每个图像请求上触发,但它的工作方式应该是在webshop.testdomain.com ,为什么?

//编辑:
这解决了我的问题:

 RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+)\.domain\.nl [NC] RewriteCond /working/%1/%2/httpdocs%{REQUEST_URI} !-F RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png)$ RewriteRule (.*) http://domain.nl/fallbackimages/fallback.php?image=$1&host=%{HTTP_REFERER}&oeps=%{HTTP_HOST} [P] 

如果你想访问子域(我假设在PHP文件中使用),你可以尝试以下方法:

 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png)$ RewriteCond %{HTTP_HOST} ([^\.]*)\.([^\.]*)\.testdomain\.com$ RewriteRule (.*) http://testdomain.com/fallback.php?image=$1&user=%1&subdomain=%2 [P] 

我将[L]标志更改为[P] ,它将代理请求,而不是redirect它。 这确实需要启用mod_proxy%1%2允许从以前的RewriteCond访问正则expression式组

另外,我不确定为什么你的RewriteRule在每个有两个子域名的请求中被触发,因为它不应该是这样。 您可以打开重写日志,并查看它匹配的内容。

希望这可以帮助。