1

アプリケーションとクライアントの間に Apache http サーバーを配置したいと考えています。

クライアントからのアクセスでは、クエリ パラメータを渡す必要があります。たとえば、クライアントがhttp://myhost:myport/myappで実行されている場合、パラメーター myparam を渡すことによってのみアクセスする必要があります。http://myhost:myport/myapp?myparam=123のように。

したがって、私のApache httpサーバーでは、クエリパラメーターmyparamを含まないリクエストをフィルタリングしたいと考えています。

フィルターを使ってみました。定義済みのフィルターがいくつかありますが、私の要件を満たすフィルターはありません。mod_ext_filterを使ってみました。しかし、URL ではなく、コンテンツ全体がプログラムに渡されているようです。URL に存在するパラメーターに基づいてフィルター処理する必要があるため、要件を満たしていないと思います。

URLで渡されるパラメータに基づいてフィルタリングするために使用できるhttpサーバーモジュールはありますか?

編集

さらに、クエリ パラメータから値を取得し、それを検証する必要もあります。検証は REST サービス呼び出しです

4

1 に答える 1

1

2.4 では、次のような簡単なことを実行できます。

<Location /myapp>
  Require expr %{QUERY_STRING} =~ /myparam/
</location>

おそらく <if> とキャプチャでこれを行うことができますが、コンテキストルートからクエリパラメーターへの「マップ」を検索する方法がわかりません。

多くの myapp->myparam ペアがある場合は、古い学校の mod_rewrite に移動して、それらを txt ベースの rewritemap に保存することをお勧めします。あなたが説明したことを達成するための「興味深い」書き換えトリックがいくつかある例を次に示します。

RewriteMap foo txt:/tmp/rewrite.map
RewriteEngine ON
# Fancy way to check two variables are equal in a RewriteCond
RewriteCond %{QUERY_STRING},${foo:$1} !^([^,]+),\1
# grab the first segment
RewriteRule ^/([^/]+)/ - [F]

ただし、(後でコメントで説明するように) ある種のリモート Web サービスからマップを取得する必要がある場合は、httpd 内に C または Lua モジュールを実装する必要があります。難しい部分はリモート応答を取得することになり、他の部分は些細なことです:

r->uri と r->args を非常に簡単に見つける独自の access_checker モジュールを作成できます。ただし、発信 REST 呼び出しを行うには、独自の http クライアントが必要です。コアには、このための API はありません。– カバーナー 8 月 24 日 13:27

于 2015-08-24T13:17:51.530 に答える