2015-08-24 6 views
1

Je souhaite avoir un serveur Apache http entre mon application et le client.Comment filtrer en fonction de la requête URL dans le serveur HTTP Apache

Un paramètre de requête doit être transmis lors de l'accès par le client. Par exemple, si mon client s'exécute en http://myhost:myport/myapp, il doit être accessible uniquement en passant le paramètre myparam. Comme http://myhost:myport/myapp?myparam=123.

Donc, dans mon serveur http apache, je veux filtrer les demandes qui ne contiennent pas le paramètre de requête myparam. J'ai essayé d'utiliser filters. Il a quelques filtres prédéfinis, mais aucun des filtres ne satisfait mes exigences. J'ai essayé d'utiliser mod_ext_filter. Mais il semble que tout le contenu soit transmis à mon programme, pas à l'URL. Puisque j'ai besoin de filtrer en fonction du paramètre présent dans l'URL, je ne pense pas que cela réponde à mes exigences.

Existe-t-il un module serveur http qui peut être utilisé pour filtrer en fonction du paramètre transmis dans l'URL?

EDIT

De plus, je dois obtenir la valeur de la requête et param valider ainsi. La validation est un appel de service REST

Répondre

1

En 2.4, vous pouvez faire quelque chose d'aussi simple que:

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

Vous pouvez probablement le faire avec <si> et captures, mais je ne sais pas comment vous pouvez obtenir pour rechercher une "carte" de la racine de contexte à la requête param.

Si vous avez beaucoup de paires myapp-> myparam, vous voudrez peut-être aller à old school mod_rewrite et les stocker dans un réécriture basé sur txt. Voici un exemple qui a deux tours de ré-écriture « intéressants » pour accomplir ce que vous avez décrit:

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] 

Mais (si comme nous le verrons plus loin dans les commentaires) vous devez récupérer la carte d'une sorte de service web à distance vous devra implémenter un module C ou Lua à l'intérieur de httpd. La partie difficile, il devient la récupération de la réponse à distance, les autres parties sont trivial:

Vous pouvez écrire votre propre module access_checker qui trouve r-> uri et r-> args assez facilement. Mais vous avez besoin de votre propre client http pour effectuer l'appel REST sortant - il n'y a pas d'API pour cela dans le noyau. - covener 24 août à 13:27

+0

Exemple de réécriture aurait besoin d'adaptation pour être tolérer plus de choses dans la chaîne de requête, en ce moment c'est une correspondance exacte. – covener

+0

J'ai besoin de récupérer la valeur du paramètre query et de le valider aussi. La validation est un appel de service REST. Comment puis je faire ça? – sag

+0

yikes, il est temps d'acheter le livre Apache Modules de Nick Kew. – covener