我正在嘗試清理我的 vBulletin 論壇的 nginx 重寫規則,該論壇在同一網站內有一些修改和其他軟體,這會導致問題。我的事情按應有的方式進行,但根據nginx 如果是邪惡的我很擔心,想嘗試將這幾個規則轉換為 try_files 。
目前,有
靜態圖像和檔案的規則,這樣它們就不會傳遞到 seo mod(例如 .gif、.ico,甚至 .css)
子資料夾 mobiquo 的規則,又稱為:tapatalk 外掛。為了使其工作,我必須將整個目錄排除在重寫之外。
如果該文件不存在。我不確定這有多重要,但這似乎是個好主意。也許是為了降低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)