Como redirecionar a raiz para o subdiretório enquanto mantém o URL na barra de endereços

3

Eu tenho uma configuração nginx com estrutura de pastas como esta:

- www
  |- splash
  |- blog

www é a pasta raiz.

Eu gostaria de redirecionar os usuários que acessam http://example.com para a pasta splash .

Mas não quero que o URL na barra de endereço mude para http://example.com/splash .

O URL na barra de endereço ainda deve ser http://example.com .

Esta regra só deve ser aplicada quando o usuário acessar a pasta raiz.

Enquanto isso, acessar a pasta blog será como sempre: http://example.com/blog .

Como faço para isso? Até agora o meu conf é o seguinte: (eles não funcionam btw, o URL é alterado)

server {
        listen 80;
        server_name www.example.com;
        root /www;
        location = / {
                rewrite ^/(.*)$ splash/$1 permanent;
        }
}
    
por Goni 13.06.2013 / 10:45

3 respostas

1

Cada contexto pode ter sua própria raiz.

Como você tem um contexto location , basta alterar a raiz.

Por exemplo.

location = / {
    root /www/splash;
}

A documentação está disponível aqui . O exemplo dado na documentação é:

location  /i/ {
  root  /spool/w3;
}

A request for "/i/top.gif" will return the file "/spool/w3/i/top.gif".

Então, basicamente, quase uma cópia disso, exceto que você tem o = para uma correspondência exata no local.

Se houver um arquivo chamado / splash / blog, você deseja que o URL vá para / splash / blog ou / blog?

Outra maneira de priorizar arquivos é usar try_files . Por exemplo:

location / {
    try_files /splash/$uri $uri =404;
}

Nesse caso, se houver um arquivo correspondente em / splash, é isso que será mostrado, caso contrário, $ uri será exibido ou, no último caso, um erro 404.

    
por 13.06.2013 / 10:57
0

Isso é tudo ...

server {
        listen 80;
        server_name www.mysite.com;
        root /www;

        location = / {
                root /www/splash;
        }

        location / {
                root /www;
        }


}
    
por 13.06.2013 / 12:00
0

Esse funcionou para mim se eu acertar sua situação:

location ~/splash.* {
    return 200 "The request was $uri";
}

location / {
    rewrite ^/$ /splash/ last;
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

De documentos Nginx

last stops processing the current set of ngx_http_rewrite_module directives and starts a search for a new location matching the changed URI;

Eu não queria criar diretório / splash / então eu apenas disse ao Nginx para responder com texto codificado. Você pode substituí-lo por diretivas exigidas.

    
por 30.10.2013 / 05:21