nginx está redirecionando em vez de reescrever quando há uma barra antes de argumentos

2

Eu tenho o seguinte bloco de localização, como parte de um roteamento complexo para um CMS:

    location @mylocation {

        if (-d $request_filename) {
            rewrite ^/(.*)$ /$controller/$siteName last;
            break;
        }

        if ($request_filename !~ "\.(js|htc|ico|gif|jpg|png|css)$") {
          rewrite ^/(.*)$ /$controller/$siteName/$1 last;
        }

    }

$controller é algo como "index.php" e $siteName é um hash que identifica o site específico no cms.

Ele está funcionando bem, o nginx reescreve http://www.mydomain/path?somearg=something a http://www.mydomain/index.php/HASH/path?somearg=something .

Mas quando eu tenho um URL como este http://www.mydomain/path/?somearg=something nginx redireciona (301) para http://www.mydomain/index.php/HASH/path?somearg=something , e index.php e HASH são expostos.

Eu tentei algo assim:

    location @mylocation {

        if (-d $request_filename) {
            rewrite ^/(.*)$ /$controller/$siteName last;
            break;
        }

        if ($request_filename ~ "") {
            #not sure what to put here
        }


        if ($request_filename !~ "\.(js|htc|ico|gif|jpg|png|css)$") {
          rewrite ^/(.*)$ /$controller/$siteName/$1 last;
        }

    }

Mas não tenho certeza do que colocar no segundo bloco, a fim de evitar o redirecionamento.

Qualquer ajuda é apreciada, obrigado.

    
por broesch 24.02.2012 / 03:15

1 resposta

1

Tem certeza de que não é o CMS que gera o redirecionamento? Nada na sua configuração ou o funcionamento do nginx geraria esse tipo de resposta.

Vamos tentar descartar a barra à direita, se existir, e ver se isso apazigua o CMS de redirecionar?

if ($request_filename !~ "\.(js|htc|ico|gif|jpg|png|css)$") {
  rewrite ^/(.*?)/?$ /$controller/$siteName/$1 last;
}
    
por 24.02.2012 / 07:18