localização / {

localização / {

Estou tentando limpar minhas regras de reescrita do nginx para meu fórum vBulletin, que possui algumas modificações e software adicional no mesmo site que causa problemas. Tenho as coisas funcionando como deveriam, mas de acordo comnginx se é mauEstou preocupado e gostaria de tentar converter essas poucas regras em try_files.

Atualmente, existe

  1. Uma regra para imagens e arquivos estáticos para que não sejam passados ​​​​para o mod SEO (por exemplo, .gif, .ico e até .css)

  2. Uma regra para a subpasta mobiquo, também conhecida como: plugin tapatalk. Para que isso funcionasse, tive que excluir todo o diretório das reescritas.

  3. Se o arquivo não existir. Não tenho certeza de quão importante isso é, mas parece uma boa ideia. Talvez seja para diminuir o trabalho do mod SEO.

As regras de reescrita do nginx na forma de bloco If aparentemente arriscada:

isso está acima do bloco /forum/ porque eu queria dar prioridade a ele, se isso for feito de maneira inadequada eu adoraria saber.

    location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
            # Some basic cache-control for static files to be sent to the browser
            expires max;
            add_header Pragma public;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }

    location /forum/ {

            try_files $uri $uri/ /forum/dbseo.php?$args;

            if ($request_uri ~* ^/forum/mobiquo) {
                    break;
            }

            if (-f $request_filename) {
            expires 30d;
                    break;
            }

            if ($request_filename ~ "\.php$" ) {
                    rewrite ^(/forum/.*)$ /forum/dbseo.php last;
            }


            if (!-e $request_filename) {
                    rewrite ^/forum/(.*)$ /forum/dbseo.php last;
            }

    }

FIM

Em algum lugar nas minhas pesquisas encontrei um template que tentei adaptar, mas como não estou entendendo de regex falhei :)

localização / {

            # if you're just using wordpress and don't want extra rewrites
            # then replace the word @rewrites with /index.php

try_files $uri $uri/ /index.php;

}

localização @rewrites {

            # Can put some of your own rewrite rules in here
            # for example rewrite ^/~(.*)/(.*)/? /users/$1/$2 last;
            # If nothing matches we'll just send it to /index.php

try_files $uri $uri/ /forum/dbseo.php?$args;

reescrever ^ /index.php por último;

reescrever ^(/.php)$ /forum/dbseo.php último;

}

Responder1

Tente esclarecer sua pergunta, especialmente no final dela, onde você está gritando em vez de fornecer o código.

Com base na configuração que você forneceu no início da sua pergunta, acabei com isso:

location /forum/ {
    index dbseo.php; # You obviously wish to send everything erroneous/inexistent to dbseo.php, any index.php file would suffer the regex location below
    try_files $uri $uri/ /forum/dbseo.php?$args; # Any inexistent file/directory will be handled over to /forum/dbseo.php

    location ^~ /forum/dbseo.php { # Avoids matching the regex location below (performance)
    }

    location ^~ /forum/mobiquo { # Avoids matching any other rules
    }

    location ~* \.php$ {
        try_files /forum/dbseo.php =404;
        # Be careful here, try to secure your location since the regex can still be manipulated for arbitrary code execution
    }
}

Locais aninhados são bons para isolar blocos de locais potencialmente conflitantes. Lembre-se de que os locais de regex são avaliados sequencialmente, portanto, para evitar que a ordem dos blocos de localização tenha impacto (o que é uma bagunça, assim como a configuração do Apache), tente sempre colocar os locais de regex em prefixos para evitar que vários deles se sigam.

Você pode aprender sobrelocationmodificadores em sua página de documentação.

Talvez existam mais sutilezas, mas você tem todas as informações básicas necessárias no meu exemplo. O trabalho é seu para entendê-lo/melhorá-lo para melhor atender às suas necessidades. :o)

informação relacionada