Reescreva URLs no apache com & na consulta

1

Estou tentando criar uma condição de reescrita e regra para reescrever URLs com & amp; na string de consulta, em vez de apenas & Isso ocorreu devido a alguma codificação inválida quando a URL é transmitida para um cliente em XML. A longo prazo, que será corrigido, mas a curto prazo, se eu puder colocar uma regra de reescrita no lugar, ela irá parar os erros 404.

Um exemplo de URL é

link

Até agora eu tenho isso

RewriteCond %{REQUEST_URI} ^/getpdf/download*
RewriteRule ^/([^&]+)(&)(.*)$ /$1&$2 [N]

com base em outros posts no serverfault (por exemplo, mod-rewrite: substituindo alguns personagens em um URL )

Eu liguei o registro de reescrita e é isso que eu vejo

10.0.0.64 - - [12/Mar/2016:06:42:52 +0000] [myserver.com/sid#7f24e32103e8][rid#7f24e3379870/initial] (2) init rewrite engine with requested uri /getpdf/download
10.0.0.64 - - [12/Mar/2016:06:42:52 +0000] [myserver.com/sid#7f24e32103e8][rid#7f24e3379870/initial] (3) applying pattern '^(md5)([^&]+)(&)(.*)$' to uri '/getpdf/download'
10.0.0.64 - - [12/Mar/2016:06:42:52 +0000] [myserver.com/sid#7f24e32103e8][rid#7f24e3379870/initial] (1) pass through /getpdf/download

Qualquer orientação sobre como formar corretamente o rewriterule seria ótima.

    
por gingerkid 12.03.2016 / 07:58

2 respostas

0

Com a ajuda da resposta de Teros, apontando-me na direção certa, resolvi minha regra de reescrita.

O primeiro passo foi combinar com% {QUERY_STRING}.

RewriteCond %{QUERY_STRING} ^md5=([0-9a-f])(&)id=([0-9])(&)(.*)$

O segundo passo foi reescrever o URL inteiro. Meu erro foi pensar que eu poderia modificar apenas a string de consulta.

RewriteRule ^(.*)$ https://myserver.com/getpdf/download?md5=%1&id=%3&%5 [N]

Algumas dicas

  • % 1 no RewriteRule usa grupos do RewriteCond
  • $ 1 usaria grupos da regex no RewriteRule, em vez
  • Reescrever usa expressões regulares compatíveis com Perl (PCRE). Eu usei esse testador para verificar meu regex - link
  • Google "Aprenda o Apache mod_rewrite: 13 exemplos do mundo real"
  • A introdução do apache para reescrever, e a imagem que mostra o básico, ajuda - link (essencialmente um caso de RTFM :))

Espero que isso ajude os outros perdidos no mundo da reescrita.

    
por 14.03.2016 / 14:55
0

A documentação do Apache afirma que, se você quiser reescrever parte da string de consulta do URI, precisará usar RewriteCond %{QUERY_STRING} .

Então, você deve tentar isto:

RewriteCond %{QUERY_STRING} md5=([0-9a-f]{20}(&)(id=[0-9]+)(&)(.*)
RewriteRule ^md5=([0-9a-f]{20}(&)id=([0-9]+)(&)(.*)$ md5=$1&id=$2&$3 [N]
    
por 12.03.2016 / 19:54