如何在 Nginx 中建立重寫規則

NGINX 重寫規則提供了一種強大的方法來修改和管理 Web 伺服器上的 URL 請求。這些規則對於重新導向 URL、更改 URL 結構和改進 SEO 至關重要。透過利用重寫規則,您可以確保使用者和搜尋引擎可以有效地存取您的內容並保持乾淨且有組織的 URL 結構。掌握重寫規則可以增強 Web 伺服器的功能和靈活性,從而提供更好的整體使用者體驗。

本指南將解釋如何在 NGINX 中建立重寫規則,提供清晰的範例和步驟來協助您設定伺服器以有效處理 URL 修改。

NGINX 重寫規則:返回指令

NGINX return 指令是管理伺服器回應的強大工具。它主要用於將客戶端重定向到不同的 URL 或發送特定的狀態代碼。該指令簡化了流量重定向,特別是在移動或重組網站時。這對於 SEO 和在過渡期間保持用戶體驗至關重要。讓我們來看一個獨特的例子來理解它的應用:

範例:假設您要將使用者從舊頁面重新導向到新頁面。在 NGINX 設定檔中,您可以使用 return 指令如下:

server {
    listen 80;
    server_name oldsite.com;
    return 301 http://newsite.com$request_uri;
}

在此範例中,對 oldsite.com 的任何請求都會永久重定向到 newsite.com,並保留請求 URI。 301狀態代碼表示永久重定向,通知搜尋引擎更新其索引。

NGINX 重寫規則:重寫指令

NGINX 重寫指令用於在進一步處理之前以各種方式變更請求 URI。它比 return 指令更通用,允許根據條件進行複雜的 URL 操作。此功能對於創建 SEO 友善的 URL 和管理舊連結至關重要。

範例:假設您需要將動態 URL 轉換為靜態 URL,以實現更好的 SEO。您可以像這樣使用重寫指令:

server {
    listen 80;
    server_name example.com;
    location /products {
        rewrite ^/products/([0-9]+)/([0-9]+)$ /product?id=$1&page=$2 last;
    }
}

在這種情況下,像 example.com/products/123/2 這樣的 URL 會在內部重寫為 example.com/product?id=123&page=2。最後一個標誌表明重寫過程應該停止並且新的 URI 應該被重新評估。

NGINX 重寫規則範例

在 NGINX 中實作 HTTPS 重寫規則

確保透過 HTTPS 的安全連線對於資料安全至關重要。 NGINX 重寫指令可以將所有 HTTP 流量重新導向到 HTTPS,從而增強傳輸中資料的安全性。

server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

在此範例中,對 example.com 的 HTTP 請求會被重新導向到 HTTPS,以確保加密通訊。

簡化 URL:NGINX 重寫規則中的重複斜線刪除

有時,URL 可能包含重複的斜杠,從而導致混亂或錯誤。 NGINX 的重寫指令透過將帶有雙斜杠的 URL 轉換為單斜杠來有效地處理這個問題。

server {
    server_name example.com;
    if ($request_uri ~* "\/\/") {
        rewrite ^/(.*)/$ /$1 permanent;
    }
}

此規則透過刪除任何多餘的斜線來簡化 URL。

目錄重定向:NGINX 重寫規則的實際應用

重新組織或移動資源時,通常需要有效地重新導向整個目錄。 NGINX 透過其重寫規則促進了這一點。

location ^~ /old-directory/ {
    rewrite ^/old-directory/(.*)$ /new-directory/$1 permanent;
}

此命令將所有請求從 /old-directory/ 重定向到 /new-directory/。

在 NGINX 中使用重寫規則進行查詢字串操作

在網站重新設計期間,根據查詢字串變更 URL 特別有益。 NGINX 重寫規則允許基於這些參數進行動態 URL 重組。

if ($args ~ "^id=(.*)&lang=(.*)") {
    set $id $1;
    set $lang $2;
    rewrite ^/page.php$ /page/$lang/$id? permanent;
}

在這裡,重寫規則將複雜的查詢字串轉換為更簡化的 URL。

確保 URL 統一:NGINX 重寫規則中的尾部斜杠

URL 結構的一致性(例如尾部斜線)對於網站一致性和 SEO 至關重要。

rewrite ^([^.]*[^/])$ $1/ permanent;

此規則可確保所有 URL 均以斜線結尾,從而保持標準化格式。

基於方法的重定向:在 NGINX 中使用重寫規則

NGINX 允許基於特定請求方法(例如 POST)進行重新導向,這對於安全處理表單提交至關重要。

if ($request_method = POST ) {
    return 301 https://example.com$request_uri;
}

此命令將所有 POST 請求重新導向到 HTTPS URL。

使用 NGINX 重寫規則保護影像

透過防止未經授權的直接連結到您的映像來保護您的伺服器資源。

location ~ .(gif|png|jpe?g)$ {
    valid_referers none blocked ~.google. ~.bing. ~.yahoo. example.com *.example.com;
    if ($invalid_referer) {
        rewrite ^/images/(.*)$ /stop-hotlinking.$1 last;
    }
}

此設定會重定向具有無效引薦來源網址的請求,從而有效阻止熱連結。

強制使用小寫 URL 以保持一致性

在整個網站中維護小寫 URL 可增強一致性並防止混淆。

location ~ [A-Z] {
    rewrite ^(.*)$ $scheme://$host$1 lowercase;
}

此命令將所有大寫 URL 元素轉換為小寫。

處理 URL 結構的變化

在網站更新期間,適應新的 URL 結構而不損失流量或損害用戶體驗至關重要。

server {
    listen 80;
    server_name example.com;
    
    location ~* ^/oldpath/(.*) {
        rewrite ^/oldpath/(.*)$ /newpath/$1 permanent;
    }
}

將使用者和搜尋引擎從舊 URL 重新導向到新 URL。

為 CMS 平台建立乾淨的 URL

對於依賴查詢字串的 CMS 平台,NGINX 重寫規則可以創建更乾淨、更適合 SEO 的 URL。

location / {
    try_files $uri $uri/ @extensionless-php;
    index index.html index.htm index.php;
}

location ~ \.php$ {
    try_files $uri =404;
}

location @extensionless-php {
    rewrite ^(/[^.]*[^/])$ $1.php last;
}

此設定將 URL 轉換為更易讀的格式,可能會提高 SEO 效能。

結論

透過在 NGINX 中建立和配置重寫規則,您可以優化 URL 管理、改進 SEO 並確保無縫的使用者體驗。定期檢查和測試您的重寫規則,以確保它們按預期運行並根據需要進行調整。掌握 NGINX 重寫規則可以讓您充分利用 NGINX 的強大功能來建立更具動態性和回應能力的 Web 伺服器。

Joshua James
跟我來
Joshua James 的最新帖子 (看全部)

發佈留言