strange things with defrules



I expected that such substituions to work  but they does not
The piece of program, 

depends(P,RHO);
defmatch(i,any);
defrule(p_r, P([],[],i),  'diff(P,RHO)*rho([],[],i));
/define the Euler equation */
Eil: D_t*V([i1])+ 
V([i0])@L[V,i1]=-(P([])@i1)/rho([])+(V([i0])|_V/2-Phi([]))@i1;

/*take the exterior derivative */
(C65) rhs(Eil)@i2;

(D65) RHO([],[],I1)*P([],[],I2)/RHO([],[])^2
       -P([],[],I1)*RHO([],[],I2)/RHO([],[])^2
/*then replace the derivative from p to rho*/
(C66) applyb1(%,p_r);

(D66) RHO([],[],I1)*P([],[],I2)/RHO([],[])^2
       -P([],[],I1)*RHO([],[],I2)/RHO([],[])^2
 ????
If I define to match exactly indices i1,i2 via 
defrule(p_r1, P([],[],i1),  'diff(P,RHO)*rho([],[],i1));
defrule(p_r2, P([],[],i2),  'diff(P,RHO)*rho([],[],i2));

(C68) apply1(d65,p_r1,p_r2);

(D68) 0
This is correct. What could be wrong with defmatch(i, any). Why 
it does not work?

rgds,
Valerij