設定 Nginx 支援 WordPress 固定連結

核心邏輯說明

在 Nginx 中,我們需要透過 try_files 指令,告訴伺服器:

  1. 先找尋是否有對應的實體檔案
  2. 若無,尋找是否有對應的實體目錄
  3. 若皆無,則將請求全部交給 WordPress 的核心入口 index.php 處理。

Nginx 設定檔範例 (.conf)

請編輯你的網站設定檔(路徑通常在 /etc/nginx/sites-available/your-site.conf),並確保 location / 區塊包含以下內容:

server {
    listen 80;
    server_name yourdomain.com;
    root /var/www/html;
    index index.php index.html index.htm;

    # --- 關鍵設定開始 ---
    location / {
        # 嘗試找檔案、找目錄,最後交給 index.php 並帶入原本的參數
        try_files $uri $uri/ /index.php?$args;
    }
    # --- 關鍵設定結束 ---

    # 處理 PHP 請求 (請依據你的 PHP 版本調整 sock 路徑)
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }

    # 安全性設定:禁止存取隱藏檔案
    location ~ /\. {
        deny all;
    }
}

操作步驟

1. WordPress 後台設定

前往 設定(Settings) > 固定連結(Permalink),選擇你偏好的格式(如:日期、文章名稱),然後點擊「儲存」。

2. 更新 Nginx 設定

在伺服器端修改完上述 .conf 檔案後,務必執行以下指令:

server {
    listen 80;
    server_name yourdomain.com;
    root /var/www/html;
    index index.php index.html index.htm;

    # --- 關鍵設定開始 ---
    location / {
        # 嘗試找檔案、找目錄,最後交給 index.php 並帶入原本的參數
        try_files $uri $uri/ /index.php?$args;
    }
    # --- 關鍵設定結束 ---

    # 處理 PHP 請求 (請依據你的 PHP 版本調整 sock 路徑)
    location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php8.2-fpm.sock;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # 安全性設定:禁止存取隱藏檔案
    location ~ /\. {
        deny all;
    }
}

檢查語法

sudo nginx -t

重新載入

sudo systemctl reload nginx