2

現在のデスクトップサイトと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ベースのソリューションは、「バケット」Cookieを設定します。

私たちが直面している問題は、デスクトップサイトのすべてのURLがモバイルサイトに再実装されているわけではないということです。私が理想的に望んでいるのは、上記のルールを適用することですが、モバイルサーバーにアクセスしようとして、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))

サポートされているすべてのURLをこのファイルにリストすれば、これが可能になることはわかっています。このプラットフォーム認識レイヤーを、提供するアプリケーションから独立させたいので、これを避けたいと思います。また、そこからリダイレクトすることでモバイルアプリケーション自体でこれを解決できることも知っていますが、可能であれば、このプラットフォーム認識レイヤーを自己完結型にする必要があります。

これはmod_rewriteを使用して可能ですか?

4

1 に答える 1

0

mod_rewriteを使用してこれを行う方法があるとは思わないでください。[P]プロキシにフラグを使用しているためRewriteRule、プロキシリクエストをmod_proxyに渡し、それが通過したかどうかさえわかりません。すべてが同じドキュメントルート(または少なくともドキュメントルートのサブディレクトリ)にある場合は、-f条件付きチェックを使用してファイルが存在するかどうかを確認できます。

これが機能するかどうかはわかりませんが、試してみることができることは、mod_proxyをProxyErrorOverrideと一緒にErrorDocument使用することです。ProxyErrorOverrideオンになっている場合、理論的にはプロキシされたリクエストがエラーを返した場合、mod_proxyはプロキシされたものの代わりにローカルエラーハンドラを使用します。次に、を使用しErrorDocument 404て、プロキシされた404をphpスクリプトなどで処理し、ローカルの書き換えエンジンを介して(特別なクエリ文字列パラメータを使用したリダイレクトを使用して)再ルーティングすることで、プロキシできるようにします。デスクトップドメインに。

于 2012-08-10T10:23:19.963 に答える