Reescreva um subdiretório para root no nginx

4

digamos que eu tenha um site http://domain/ e eu coloquei alguns arquivos em um subdiretório /html_root/app/ e eu usei a seguinte regra de reescrita para reescrever esta pasta na minha raiz:

location / {
    root /html_root;
    index index.php index.html index.htm;

    # Map http://domain/x to /app/x unless there is a x in the web root.
    if (!-f $request_filename){
        set $to_root 1$to_root;
    }
    if (!-d $request_filename){
        set $to_root 2$to_root;
    }
    if ($uri !~ "app/"){
        set $to_root 3$to_root;
    }
    if ($to_root = "321"){
        rewrite ^/(.+)$ /app/$1;
    }

    # Map http://domain/ to /app/.
    rewrite ^/$ /app/ last;
}

Eu sei que isso não é uma maneira inteligente, porque eu tenho outro subdiretório /html_root/blog/ e eu quero que ele possa ser acessado por http://domain/blog/ .

Meu problema é que a regra de reescrita acima funciona bem, mas ainda tem alguns problemas: Se eu acessar

http://domain/a-simple-page/ (reescrito de http://domain/app/a-simple-page/ )

funciona bem, mas se eu acessar

http://domain/a-simple-page (sem barra final), ele redireciona para o endereço original:

http://domain/app/a-simple-page/ ,

Qualquer maneira de redirecionar o URL sem barra segue minha regra?

    
por sparanoid 07.02.2011 / 09:37

1 resposta

5

Caso clássico de seguir um tutorial certo errado em vez de ler o wiki Eu sugiro ler sobre os recursos que você (deveria) usar (como localização e try_files), bem como meu primer Nginx , como você perder completamente o básico de Nginx.

Eu fiz uma tentativa de escrever o que você quer em um formato adequado, mas não posso prometer que funcionará, já que não tenho certeza se entendi o que você está tentando fazer, no entanto, ele deveria te dar uma base para começar de.

server {
    listen 80;
    server_name foobar;

    root /html_root;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ @missing;
    }

    location /app {
        # Do whatever here or leave empty
    }

    location @missing {
        rewrite ^ /app$request_uri?;
    }
}
    
por 07.02.2011 / 10:38

Tags