下游404上的Apache重定向

时间:2012-08-10 09:21:16

标签: mod-rewrite mobile apache2 wurfl

我们正在构建一个移动网站,其网址结构与我们当前的桌面网站相匹配。我们在同一个域上托管它们,并使用apache使用WURFL过滤它们之间的流量,以帮助确定哪些代理到哪里。

我们的过滤规则目前如下:

RewriteCond %{HTTP_COOKIE} "bucket=mobile"
RewriteRule ^(.*)$ http://internal-mobile-pool.ourdomain.com/$1 [P]

RewriteRule ^(.*)$ http://internal-desktop-pool.ourdomain.com/$1 [P]

我们基于WURFL的解决方案为我们设置了“桶”cookie。

我们面临的问题是,并非我们桌面网站上的所有网址都已在我们的移动网站上重新实施。我理想的是,上述规则适用,但如果它试图转移到移动服务器,并获得404,它会提供来自桌面服务器的内容。

即如果移动设备请求www.ourdomain.com/some_desktop_only_resource.html,则internal-mobile-pool.ourdomain.com/some_desktop_only_resource.html会返回404 - 以便它返回desktop-pool.ourdomain上的内容。 COM / some_desktop_only_resource.html

用伪代码

来描述
if(isMobile)
   response = getMobileResponse(url)
   if(response.code != 404)
        serveResponse(response)
   else
        serveResponse(getDesktopResponse(url))

我知道如果我在此文件中列出所有支持的网址,这是可能的 - 我想避免这种情况,因为我希望此平台识别图层独立于它所服务的应用程序。我也知道我可以通过从那里重定向来解决移动应用程序本身的问题,但如果可能的话,我希望这个平台识别层是自包含的。

使用mod_rewrite可以吗?

1 个答案:

答案 0 :(得分:0)

不要认为有办法使用mod_rewrite来做到这一点。因为您使用[P]标志进行代理,RewriteRule将代理请求交给mod_proxy,甚至不知道它是否通过。如果所有内容都位于同一文档根目录中(或至少是文档根目录的子目录),则可以使用-f条件检查来查看文件是否存在。

你可以尝试做的事情虽然我不知道这是否有用,但是使用了mod_proxy的ProxyErrorOverride along with ErrorDocument。如果您的ProxyErrorOverride已打开,理论上如果代理请求返回错误,mod_proxy将使用本地错误处理程序而不是代理错误处理程序。然后你可以使用ErrorDocument 404用PHP脚本或其他东西来处理代理404,然后做一些关于通过本地重写引擎重新路由它(可能带有特殊查询字符串参数的重定向?)所以它可以代理到桌面域。

相关问题