Ich versuche, meine Nginx-Umschreibregeln für mein vBulletin-Forum zu bereinigen, das einige Änderungen und zusätzliche Software innerhalb derselben Site enthält, die Probleme verursachen. Bei mir funktioniert alles wie es sollte, aber lautnginx Wenn ist böseIch bin besorgt und möchte stattdessen versuchen, diese wenigen Regeln in Try_files umzuwandeln.
Derzeit gibt es
Eine Regel für statische Bilder und Dateien, damit diese nicht an den SEO-Mod weitergegeben werden (z. B. .gif, .ico, sogar .css)
Eine Regel für den Unterordner mobiquo, auch bekannt als: Tapatalk-Plugin. Damit das funktioniert, musste ich das gesamte Verzeichnis vom Umschreiben ausschließen.
Wenn die Datei nicht existiert. Ich bin nicht sicher, wie wichtig das ist, aber es scheint eine gute Idee zu sein. Vielleicht soll es den Arbeitsaufwand des SEO-Mods verringern.
Die Nginx-Umschreibregeln in der anscheinend riskanten If-Blockform:
dies steht über dem /forum/-Block, weil ich ihm Priorität einräumen wollte. Wenn dies nicht ordnungsgemäß gemacht wird, würde ich es gerne wissen.
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;
}
}
ENDE
Irgendwo bei meinen Suchen habe ich eine Vorlage gefunden, die ich anzupassen versuchte, aber da ich mich mit regulären Ausdrücken nicht auskenne, ist es mir nicht gelungen :)
Standort / {
# if you're just using wordpress and don't want extra rewrites
# then replace the word @rewrites with /index.php
versuche_dateien $uri $uri/ /index.php;
}
Standort @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;
neu schreiben ^ /index.php zuletzt;
schreibe ^(/.php)$ /forum/dbseo.php zuletzt um;
}
Antwort1
Versuchen Sie, Ihre Frage zu bereinigen, insbesondere das Ende, wo Sie schreien, anstatt Code bereitzustellen.
Basierend auf der Konfiguration, die Sie oben in Ihrer Frage angegeben haben, kam ich zu folgendem Ergebnis:
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
}
}
Verschachtelte Standorte sind gut für die Isolierung potenziell widersprüchlicher Standortblöcke. Denken Sie daran, dass Regex-Standorte nacheinander ausgewertet werden. Um also zu vermeiden, dass die Reihenfolge der Standortblöcke einen Einfluss hat (was genauso chaotisch ist wie die Apache-Konfiguration), sollten Sie Regex-Standorte immer in Präfixe einschließen, um zu vermeiden, dass mehrere von ihnen aufeinander folgen.
Erfahren Sie mehr überlocation
Modifikatoren auf der Dokumentationsseite.
Vielleicht gibt es noch mehr Feinheiten, aber in meinem Beispiel haben Sie alle grundlegenden Informationen, die Sie brauchen. Es ist Ihre Aufgabe, es zu verstehen/verbessern, damit es Ihren Bedürfnissen besser entspricht. :o)