Mod rewrite 下游404上的Apache重定向

Mod rewrite 下游404上的Apache重定向,mod-rewrite,mobile,apache2,wurfl,Mod Rewrite,Mobile,Apache2,Wurfl,我们正在构建一个移动站点,其url结构与我们当前的桌面站点相匹配。我们将它们托管在同一个域上,并使用apache来过滤它们之间的通信量,使用WURFL来帮助决定哪些代理去哪里 我们的筛选规则目前如下所示: RewriteCond %{HTTP_COOKIE} "bucket=mobile" RewriteRule ^(.*)$ http://internal-mobile-pool.ourdomain.com/$1 [P] RewriteRule ^(.*)$ http://internal-

我们正在构建一个移动站点,其url结构与我们当前的桌面站点相匹配。我们将它们托管在同一个域上,并使用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的解决方案为我们设置了“bucket”cookie

我们面临的问题是,并不是我们桌面站点上的所有URL都已在我们的移动站点上重新实现。理想情况下,我希望应用上述规则,但如果它尝试转到移动服务器,并获得404,它将从桌面服务器提供内容

ie如果手机请求www.ourdomain.com/some\u desktop\u only\u resource.html,而internal-mobile-pool.ourdomain.com/some\u desktop\u only\u resource.html返回404-以返回desktop-pool.ourdomain.com/some\u desktop\u only\u resource.html上的内容

用伪代码来描述这一点

if(isMobile)
   response = getMobileResponse(url)
   if(response.code != 404)
        serveResponse(response)
   else
        serveResponse(getDesktopResponse(url))
我知道如果我在这个文件中列出所有受支持的URL,这是可能的-我希望避免这种情况,因为我希望这个平台识别层独立于它所服务的应用程序。我也知道我可以在移动应用程序中通过重定向解决这个问题,但是如果可能的话,我希望这个平台识别层是独立的


使用mod_rewrite可以吗?

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


您可以尝试使用mod_代理,尽管我不知道这是否有效。如果启用了
ProxyErrorOverride
,理论上,如果代理请求返回错误,mod_代理将使用本地错误处理程序而不是代理的错误处理程序。然后,您可以使用
errordocument404
使用php脚本或其他方法处理代理的404,然后通过本地重写引擎重新路由它(可能使用带有特殊查询字符串param的重定向?)因此,它可以被代理到桌面域。

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

您可以尝试使用mod_代理,尽管我不知道这是否有效。如果启用了
ProxyErrorOverride
,理论上,如果代理请求返回错误,mod_代理将使用本地错误处理程序而不是代理的错误处理程序。然后,您可以使用
errordocument404
使用php脚本或其他方法处理代理的404,然后通过本地重写引擎(可能使用带有特殊查询字符串param的重定向?)将其重新路由回桌面域