Nginx reescreve problema

1

Eu gostaria de uma configuração específica para um dos meus servidores virtuais, mas eu tenho um problema explicando isso para o Nginx:)

É bem simples. Se o URI se parece com

example.com/whatever_1/whatever_2/.../whatever_n

Eu gostaria de reescrevê-lo como

example.com/index.php?request=whatever_1/whatever_2/.../whatever_n

O segundo é se o URI começa com /administration/ like

example.com/administration/whatever_1/.../whatever_n

Eu gostaria que fosse reescrito como

example.com/administration/index.php?request=whatever_1/.../whatever_n

Eu estava mexendo e tentei:

server
{
#   listen 80;
    server_name example.com;
    index index.html index.php;
    root /srv/example/;

    location ~ /administration/(.*)$
    {
        if (!-e $request_filename)
        {
            rewrite ^/(.*)$ /administration/index.php?request=$1 last;
        }
        break; #tried with and without it
    }

    location / #tried with and without this location block
    {
        if (!-e $request_filename)
        {
            #rewrite ^/(.*)$ /index.php?/$1 last;
            rewrite ^/(.*)$ /index.php?request=$1 last;
        }
    }

    location ~ \.php$ #boilerplate
        {
                # Filter out arbitrary code execution
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_pass  unix:/var/run/php5-fpm.sock;
        }
}

Mas isso não funciona. Sou muito novo no Nginx, então qualquer ajuda seria apreciada.

Obrigado, Jan.

    
por Majster 29.07.2013 / 22:44

1 resposta

2

Isso é nginx, não apache. Você deve evitar reescrever quando possível (e muitas vezes é possível).

Use try_files em seu lugar. Por exemplo:

location /administration/ {
    try_files $uri $uri/ /administration/index.php?request=$request_uri;
}

location / {
    try_files $uri $uri/ /index.php?request=$request_uri;
}
    
por 30.07.2013 / 00:41