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
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)
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.
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 sobrelocation
modificadores 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)