Estoy intentando limpiar mis reglas de reescritura de nginx para mi foro vBulletin, que tiene algunas modificaciones y software adicional dentro del mismo sitio que causa problemas. Tengo las cosas funcionando como deberían, pero segúnnginx si es maloEstoy preocupado y me gustaría intentar convertir estas pocas reglas en try_files.
Actualmente, hay
Una regla para imágenes y archivos estáticos para que no pasen al mod SEO (por ejemplo, .gif, .ico, incluso .css)
Una regla para la subcarpeta mobiquo, también conocida como complemento tapatalk. Para que eso funcione, tuve que excluir todo el directorio de las reescrituras.
Si el archivo no existe. No estoy seguro de lo importante que sea, pero parece una buena idea. Tal vez sea para reducir el trabajo del mod seo.
Las reglas de reescritura de nginx en la aparentemente arriesgada forma de bloque If:
esto está encima del bloque /forum/ porque quería darle prioridad, si esto se hace incorrectamente, me encantaría saberlo.
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;
}
}
FIN
En algún lugar de mis búsquedas encontré una plantilla que intenté adaptar, pero como no entiendo las expresiones regulares, fallé :)
ubicación / {
# 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;
}
ubicación @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;
reescribir ^ /index.php al final;
reescribe ^(/.php)$ /forum/dbseo.php al final;
}
Respuesta1
Intente aclarar su pregunta, especialmente al final, donde está gritando en lugar de proporcionar el código.
Según la configuración que proporcionaste en la parte superior de tu pregunta, terminé con eso:
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
}
}
Las ubicaciones anidadas son buenas para aislar bloques de ubicaciones potencialmente conflictivos. Tenga en cuenta que las ubicaciones de expresiones regulares se evalúan secuencialmente, por lo tanto, para evitar que el orden de los bloques de ubicación tenga un impacto (lo cual es un desastre al igual que la configuración de Apache), intente siempre encerrar las ubicaciones de expresiones regulares en prefijos para evitar que varias de ellas se sigan entre sí.
Puedes aprender sobrelocation
modificadores en su página de documentación.
Tal vez haya más sutilezas, pero tienes toda la información básica que necesitas en mi ejemplo. El trabajo es suyo para comprenderlo/mejorarlo para que se adapte mejor a sus necesidades. :u)