Parece que isso está em um contexto diretório . Nesse caso, o $1 backreference não contém um prefixo de barra (porque o caminho de URL com o qual o padrão RewriteRule <> corresponde não contém um prefixo de barra), portanto, ele é visto como < em> caminho relativo substituição. mod_rewrite adiciona de volta o prefixo de diretório (por exemplo, /home/usrn32/domains/myserver.com/public_html/ ) à substituição quando é relativo .
Você precisa incluir explicitamente o prefixo de barra na susbtitution (ou usar uma diretiva RewriteBase ), para que não seja mais relativo . Por exemplo:
RewriteRule (.*) /$1? [R=permanent,L]
Além disso, você provavelmente deseja incluir o L flag, para evitar novas reescritas (se tiver alguma).
Also, I want to catch all arg numbers, not just 0.
Modifique seu CondPattern ( ^arg=0$ ) para algo como ^arg=\d+$ (1 ou mais dígitos).
Em resumo:
RewriteCond %{QUERY_STRING} ^arg=\d+$
RewriteRule (.*) /$1? [R=permanent,L]
remove all queries
Se você literalmente quisesse remover todos os parâmetros da string de consulta, você poderia alterar o CondPattern para apenas um ponto (por exemplo, . ) para corresponder a qualquer caractere .