Nginx: Regra reescrita para subpasta

5

Eu tenho um subdomínio onde quero manter projetos em que estou trabalhando para mostrar esses projetos aos clientes.

Aqui está o arquivo de configuração de / etc / nginx / sites-available / projects:

server {
    listen   80;
    server_name projects.example.com;
    access_log /var/log/nginx/projects.example.com.access.log;
    error_log /var/log/nginx/projects.example.com.error.log;

    location / {
        root   /var/www/projects;
        index  index.html index.htm index.php;
    }

    location /example2.com {
        root   /var/www/projects;
        auth_basic           "Stealth mode";
        auth_basic_user_file /var/www/projects/example2.com/htpasswd;
    }

    location /example3.com/ {
        index  index.php;

        if (-f $request_filename) {
            break;
        }
        if (!-f $request_filename) {
            rewrite ^/example3\.com/(.*)$ /example3\.com/index.php?id=$1 last;
            break;
        }
    }

    location ~ \.php {
        root /var/www/mprojects;
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
    }
}

Eu quero poder colocar diferentes mecanismos php (wordpress, getsimple etc.) em subpastas. Esses mecanismos têm parâmetros de consulta diferentes (id, q, url, etc.), portanto, para que as URLs preety funcionem, preciso fazer uma reconfiguração. No entanto, acima não funciona. Esta é a resposta que recebo:

Warning: Unknown: Filename cannot be empty in Unknown on line 0
Fatal error: Unknown: Failed opening required '' (include_path='.:/usr/local/lib/php') in Unknown on line 0

Se eu eliminar a regra " localização /exemplo3.com / ", tudo funcionará, mas sem URLs preferenciais. Por favor ajude.

A configuração é baseada neste post: link

Estou usando o Ubuntu 9.10 e o nginx / 0.7.62 com o php-fpm.

    
por Misha Reyzlin 10.04.2010 / 15:13

1 resposta

10

Você não deve escapar do período (.) na segunda parte da reescrita:

rewrite ^/example3\.com/(.*)$ /example3\.com/index.php?id=$1 last;

deve ser

rewrite ^/example3\.com/(.*)$ /example3.com/index.php?id=$1 last;

Mas como é o seu id ? Se for um número, você pode tentar:

location /example3.com/ {
    index  index.php;
    rewrite "^/example3\.com/([0-9]+)$" /example3.com/index.php?id=$1 break;
}
    
por 05.05.2010 / 21:04