首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Nginx Rewrite 實戰案例集:域名跳轉、維護頁面、目錄重寫、參數保持等 7 大常見場景

     編輯:Java 綜合教學

Nginx Rewrite 實戰案例集

運維工作中 Nginx Rewrite 既強大又易坑。本文整理 7 個高頻生產場景,提供可直接落地的配置片段與核心指令解析。

場景一:裸域名 301 跳轉 www

server {
    listen 80;
    server_name abc.com;
    access_log off;
    rewrite ^(.+)$ $scheme://www.$host$1 permanent;
}

$scheme 保持協議,$host 獲取請求主機名,permanent 返回 301。

場景二:舊域名遷移新域名,保持路徑參數

server {
    server_name www.abc.com www.def.com;
    location / {
        if ($host = 'www.abc.com') {
            rewrite ^/(.*)$ https://www.def.com/$1 permanent;
        }
    }
}

建議在 server_name 同時列出新舊域名,避免額外 server 塊。

場景三:維護頁面白名單 IP 穿透

server {
    set $rewrite true;
    if ($remote_addr = "1.2.3.4") { set $rewrite false; }
    if ($rewrite = true) {
        rewrite ^(.+)$ https://www.abc.com/maintenance.html redirect;
    }
    location = /maintenance.html {
        root /var/vhost;
    }
}
  • 多 IP 白名單可疊加 if 或使用 geo 模塊
  • location = 精確匹配,避免循環重寫
  • redirect 返回 302 臨時跳轉,permanent 為 301

場景四:子域名路徑遷移至主域名子目錄,保持參數

server {
    server_name bbs.abc.com;
    location /post {
        rewrite ^(.+)$ https://www.abc.com/bbs$1 permanent;
    }
}

$1 捕獲完整 URI 路徑含查詢串,自動保持參數。

場景五:基於請求 URI 正則匹配跳轉

# 單頁面跳轉
if ($request_uri ~* ^/note\.php\?product_code=(.*)$) {
    rewrite ^ https://www.abc.com permanent;
}

# 多論壇 ID 批量跳轉
if ($request_uri ~ ^/forum-(140|141|142|143|144|145|150|151|152|153|154|155|156|157|158|159|200|222|223|224|225|226|227|228)-(\d+)\.html$) {
    rewrite ^ https://www.abc.com/list permanent;
}

~* 大小寫不敏感,$request_uri 包含查詢串,$uri 不含。

場景六:禁止訪問上傳目錄下的 PHP 腳本

location ~* /upload/.*\.php$ {
    return 404;
}

安全加固必備,防止上傳木馬執行。return 404 比 deny all 隱藏真實狀態。

場景七:精確 URL 到 URL 映射

location ~* ^/ab/maintain/main.html {
    rewrite ^(.+)$ https://www.abc.com/maintain/main.html permanent;
}

核心指令速查

指令作用旗標
rewriteURL 重寫last/break/redirect/permanent
return直接返回狀態碼/內容404/302/200 "text"
if條件判斷變量匹配/正則/文件存在
set設置變量邏輯組合控制

避坑提醒

  1. if 是惡魔:優先用 location 匹配,if 僅用於 return/rewrite ... last
  2. 正則捕獲組 $1..$9 僅在當前 rewrite 生效
  3. 重寫後尾部參數自動保留,除非顯式在替換串添加 ?
  4. 測試用 nginx -t、curl -v 觀察 Location 頭
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved