Я пытаюсь очистить свои правила перезаписи nginx для моего форума vBulletin, на котором есть некоторые модификации и дополнительное программное обеспечение на том же сайте, что вызывает проблемы. У меня все работает так, как должно, но согласно nginx, если это зло, я обеспокоен и хотел бы вместо этого попытаться преобразовать эти несколько правил в try_files.

В настоящее время есть

  1. Правило для статических изображений и файлов, чтобы они не передавались моду seo (например, .gif, .ico, даже .css)

  2. Правило для подпапки mobiquo, которая также называется плагин tapatalk. Чтобы это работало, мне пришлось исключить весь каталог из переписанных.

  3. Если файл не существует. Я не уверен, насколько это важно, но это кажется хорошей идеей. Может быть, это снизить работу сео мод.

Правила nginx переписывают в явно рискованной форме блока:

это выше /forum / block, потому что я хотел дать ему приоритет, если это сделано неправильно, я хотел бы знать.

    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;

}

location @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?$ Арг;

переписать ^ /index.php last;

переписать ^(/. php)$ /forum/dbseo.php last;

}

1 ответ1

0

Постарайтесь очистить свой вопрос, особенно в конце, если вы кричите, а не предоставите код.

Основываясь на конфигурации, которую вы указали в верхней части вашего вопроса, я получил следующее:

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 на его странице документации.

Может быть, есть еще какие-нибудь подтексты, но у вас есть вся основная информация, которая вам нужна в моем примере. Ваша задача - понять / улучшить ее, чтобы она лучше соответствовала вашим потребностям. : О)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .