Я пытаюсь очистить правила перезаписи nginx для моего форума vBulletin, который имеет некоторые изменения и дополнительное программное обеспечение на том же сайте, что вызывает проблемы. У меня все работает как надо, но согласноnginx Если это злоЯ обеспокоен и хотел бы попробовать преобразовать эти несколько правил в try_files.
В настоящее время существует
Правило для статических изображений и файлов, чтобы они не передавались в seo-модуль (например, .gif, .ico, даже .css)
Правило для подпапки mobiquo, которая также известна как: плагин tapatalk. Чтобы это работало, мне пришлось исключить весь каталог из перезаписей.
Если файл не существует. Я не уверен, насколько это важно, но это кажется хорошей идеей. Возможно, это для того, чтобы снизить работу seo-мода.
Правила перезаписи nginx в явно рискованной форме блока If:
это выше блока /forum/, потому что я хотел дать ему приоритет. Если это сделано неправильно, я бы хотел знать.
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;
}
}
КОНЕЦ
Где-то в своих поисках я нашел шаблон, который попытался адаптировать, но так как я не разбираюсь в регулярных выражениях, у меня ничего не получилось :)
расположение / {
# 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;
}
местоположение @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;
переписать ^ /index.php последний;
переписать ^(/.php)$ /forum/dbseo.php последний;
}
решение1
Постарайтесь прояснить свой вопрос, особенно ту его часть, где вы кричите вместо того, чтобы предоставить код.
На основе конфигурации, которую вы предоставили в начале своего вопроса, я пришел к следующему:
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
}
}
Вложенные местоположения хороши для изоляции потенциально конфликтующих блоков местоположений. Помните, что местоположения регулярных выражений оцениваются последовательно, поэтому, чтобы избежать влияния порядка блоков местоположений (что является беспорядком, как и конфигурация Apache), старайтесь всегда заключать местоположения регулярных выражений в префиксные, чтобы избежать нескольких из них, следующих друг за другом.
Вы можете узнать оlocation
модификаторы на странице документации.
Может быть, есть еще тонкости, но вся основная информация, которая вам нужна, есть в моем примере. Ваша задача понять/улучшить его, чтобы он лучше соответствовал вашим потребностям. :o)