2 votes

Apache RewriteRule on VirtualHosts ne fonctionne pas avec les regex de capture de groupe

Je dois créer un RewriteRule pour déléguer un chemin URL comme /tdg/image.jpg?mode=crop&width=300&height=300 à un proxy local.

Le proxy a besoin que l'URL donnée soit transformée dans le format suivant.

http://localhost:8888/unsafe/300x300/smart/tdg/image.jpg

J'ai d'abord essayé d'utiliser ProxyPassMatch mais je ne parviens pas à récupérer les données de largeur et de hauteur à partir de la chaîne d'interrogation.

ProxyRequests On
ProxyPreserveHost On
ProxyPassMatch ^\/(tdg.+\.(?:png|jpeg|jpg|gif))\?mode=crop.+width=(d+)&height=(d+) http://localhost:8888/unsafe/$2x$3/smart/$1

J'ai aussi essayé RewriteRule

RewriteEngine On
RewriteRule ^\/(tdg.+\.(?:png|jpeg|jpg|gif))\?mode=crop.+width=(d+)&height=(d+) http://localhost:8888/unsafe/$2x$3/smart/$1

Et dans les deux cas, l'URL de résultat pour le proxy est http://localhost:8888/unsafe/x/smart/$1 où devrait être http://localhost:8888/unsafe/300x300/smart/tdg/image.jpg

Je n'ai aucune idée de la raison pour laquelle je ne peux pas récupérer la width y height à partir de la chaîne de requête, en utilisant group syntaxe regex.

3voto

Pavel Zdenek Points 166

En RewriteRule ne correspond qu'à l'élément "path", il n'inclut pas la chaîne de caractères de la requête. Essayez :

RewriteEngine On
RewriteCond %{QUERY_STRING} mode=crop.+width=(\d+)&height=(\d+)
RewriteRule ^\/(tdg.+\.(?:png|jpeg|jpg|gif)) http://localhost:8888/unsafe/%1x%2/smart/$1 [P]

Notez la différence de la rétro-référence dans le remplacement lors de l'utilisation de RewriteCond . Afin d'utiliser les rétro-références provenant des deux endroits, utilisez %N pour celles provenant de RewriteCond et $N pour ceux de la RewriteRule .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X