地點 / {

地點 / {

我正在嘗試清理我的 vBulletin 論壇的 nginx 重寫規則,該論壇在同一網站內有一些修改和其他軟體,這會導致問題。我的事情按應有的方式進行,但根據nginx 如果是邪惡的我很擔心,想嘗試將這幾個規則轉換為 try_files 。

目前,有

  1. 靜態圖像和檔案的規則,這樣它們就不會傳遞到 seo mod(例如 .gif、.ico,甚至 .css)

  2. 子資料夾 mobiquo 的規則,又稱為:tapatalk 外掛。為了使其工作,我必須將整個目錄排除在重寫之外。

  3. 如果該文件不存在。我不確定這有多重要,但這似乎是個好主意。也許是為了降低seo mod的工作量。

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)

相關內容