地点 / {

地点 / {

我正在尝试清理 vBulletin 论坛的 nginx 重写规则,该论坛在同一站点内有一些修改和附加软件,这会导致问题。我一切都正常,但根据nginx If 是邪恶的我很担心,想尝试将这几条规则转换为 try_files。

目前,

  1. 静态图像和文件的规则,以便它们不会传递给 SEO 模块(例如 .gif、.ico,甚至 .css)

  2. 子文件夹 mobiquo 的规则,又称为 tapatalk 插件。为了使它工作,我必须将整个目录排除在重写之外。

  3. 如果文件不存在。我不确定这有多重要,但这似乎是个好主意。也许是为了降低 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

尝试文件$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)

相关内容