Redirecionando a subpasta para a raiz diferente no NGINX fornece o loop de redirecionamento

2

Estou tentando algo que achei bem simples: redirecionar domain.com/dashboard/ para outro aplicativo (diferente) do meu domínio principal (que é uma instalação do wordpress, mas acho que isso é irrelevante).

Portanto, ao visitar domain.com/dashboard/anywhere , este segundo aplicativo deve agir como se /dashboard/ fosse a rota do domínio e processar todos os URLs, etc., como normal.

O que eu tentei até agora apenas causa um loop de redirecionamento, não direciona nada ou gera um erro 500.

Aqui está um exemplo da minha localização nginx até agora:

location ~ ^/dashboard/
{
   alias /srv/www/htdocs/fork/; // this is the second application I want to access

   rewrite "^(/.*)$"      http://domain.com/$1 permanent;

   index index.php index.html;

   include /etc/nginx/fastcgi_params;

   fastcgi_pass  127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;

   break;
}

Já tentei mudar de alias para root , mas sem sucesso. E eu não tenho certeza do que tentar em seguida.

Alguém tem alguma ideia sobre o que poderia estar causando o redirecionamento? (Essencialmente causando um loop de domain.com/dashboard/dashboard/dashboard (etc).

Atualizar

Ok, seguindo os conselhos de Mark abaixo, mudei o bloco de localização para cima de qualquer regra de wordpress e comentei um código. Foi feito progresso no sentido de que agora uma solicitação para domain.com/dashboard/ acessará o aplicativo correto, mas agora está procurando naquele aplicativo por uma pasta dashboard .

Este é o código atual:

location ~ ^/dashboard(/)(.*)$
{
   root /srv/www/htdocs/fork/;

   break;
}

e o erro atual nos logs é "/srv/www/htdocs/fork/dashboard/index.php" is not found (o que eu estou procurando depois é /srv/www/htdocs/fork/index.php .

    
por josh 06.08.2013 / 15:12

2 respostas

0

Na primeira vez que /dashboard/foo é atingido, o processamento é reduzido à linha rewrite , onde ele para o processamento e redireciona de volta para /dashboard no mesmo domínio, criando um loop.

Pode ser relevante que seu outro aplicativo seja uma instalação do Wordpress, porque o Wordpress inclui suas próprias diretivas de reescrita, que basicamente dizem que, se qualquer URL não mapear para um arquivo ou diretório físico, passá-lo para o Wordpress. Portanto, é importante que esse bit de configuração apareça antes do Wordpress reescrever as regras.

Se eu entendi a situação corretamente e os dois aplicativos estão no mesmo domínio, você não precisa da diretiva rewrite aqui. A diretiva alias deve ser suficiente para veicular o endereço /dashboard de um local diferente.

    
por 06.08.2013 / 15:39
0

Tente alias em vez disso:

location /dashboard {
  # you don't need regexps here, naming location will use hash lookup which is much faster
  alias /srv/www/htdocs/fork/;
}
    
por 07.08.2013 / 10:27