Redirecionamento do Apache - remova todas as consultas

1

Estou tentando remover todas as consultas no URL:

  • https://api.myserver.com/image.png?arg=0 deve se tornar
  • https://api.myserver.com/image.png

Eu usei isso:

RewriteCond      %{QUERY_STRING}    ^arg=0$
RewriteRule      (.*)               $1?     [R=permanent]

E este é o resultado:

https://api.myserver.com/home/usrn32/domains/myserver.com/public_html/image.png

Assim, os parâmetros são removidos, mas o caminho é absoluto em vez de relativo. Além disso, quero capturar todos os números arg , não apenas 0 .

Como?

    
por Primož Kralj 25.05.2018 / 13:25

1 resposta

1

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 .

    
por 25.05.2018 / 15:37