I have the feeling that your
redirect 301 ^/cata/catb$ /cata/catb?p=1 redirect regex applies only on the path path of your URL and ignores your ending parameters
Therefore the redirection is done in a kind of recursively manner:
/cata/catb → /cata/catb?p=1
/cata/catb?p=1 → /cata/catb?p=1?p=1
/cata/catb?p=1?p=1 → /cata/catb?p=1?p=1?p=1
Could you try changing your
redirect 301 ^/cata/catb$ /cata/catb?p=1 in
redirect 301 ^/cata/catb$ /cata/catc?p=1 and check the output?
or adding a trailing
"/"to your path ->
/cata/catb/?p=1 even if it is far from being sexy.
You might also be interested by the following commands