The immediately obvious solution would be this simple cut-and-choose protocol:
Prover: selects a random value $v$ and sends the value $y = v^\ell$
Verifier: selects and sends a random bit $b$
Prover: if $b=0$, sends the value $t_0=v$. If $b=1$, sends the value $t_1=vu$
Verifier: if $b=0$, then verify that $t_0^\ell = y$. If $b=1$, then verify that $t_1^\ell = y w$
The standard zero knowledge logic works - if the prover knows a $y$ value for which he knows both correct responses $t_0$ and $t_1$, then (assuming that inverses are also easy to compute) he can recover the value $u$ (hence, if he succeeds with this protocol a number of times, then the probability of success without him knowing $u$ is minimal). And, only one of the answers does not give any information to the verifier.