Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

Apache Rewrite 突破 9 個捕獲組限制:雙規則鏈接傳遞 14+ 參數實戰技法

編輯:關於伺服器

Apache mod_rewrite 單條 RewriteRule 僅支援 $1-$9 九個反向引用,超出即失效。實際 SEO 偽靜態常需 10+ 參數 (如多級分類、篩選器)。本文揭秘「分規則鏈接 + [C] 鏈標誌」技法,實現無上限參數透傳。

核心原理

  • [C] (chain) 標誌:當前規則匹配成功後,不結束重寫,將輸出傳遞給下一條規則繼續處理。
  • $N 引用當前規則捕獲組;%N 引用上一條 RewriteCond 捕獲組 (此處不涉及)。
  • 利用查詢字串 ?a=1&b=2... 作為參數載體,跨規則累積。

實戰範例:14 參數透傳

URL 格式


/a1b2c3d4e5f6g7h8i9j10k11l12m13n14
# 或
/index-1-2-3-4-5-6-7-8-9-10-11-12-13-14.html

.htaccess 配置 (方案一:字母分隔)


RewriteEngine On

# 規則 1:處理前 8 參數 (a-h),輸出帶參數查詢串供規則 2 使用
RewriteRule ^a(.*)b(.*)c(.*)d(.*)e(.*)f(.*)g(.*)h(.*)$ $8&a=$1&b=$2&c=$3&d=$4&e=$5&f=$6&g=$7 [C,NC]

# 規則 2:接收規則 1 輸出,處理後 6 參數 (i-n),最終重寫至 index.php
RewriteRule ^(.*)i(.*)j(.*)k(.*)l(.*)m(.*)n(.*)$ index.php?$8&h=$1&i=$2&j=$3&k=$4&l=$5&m=$6&n=$7 [QSA,L,NC]

.htaccess 配置 (方案二:連字號分隔,更通用)


RewriteEngine On

# 規則 1:前 9 參數 (受限於 $9),輸出攜帶參數
RewriteRule ^index-(.*?)-(.*?)-(.*?)-(.*?)-(.*?)-(.*?)-(.*?)-(.*?)-(.*?)\.html$ $9&a=$1&b=$2&c=$3&d=$4&e=$5&f=$6&g=$7&h=$8 [C,NC]

# 規則 2:接收規則 1 輸出 ($7 即為規則1的 $9),處理剩餘 5 參數
RewriteRule ^(.*?)-(.*?)-(.*?)-(.*?)-(.*?)-(.*?)$ index.php?$7&i=$1&j=$2&k=$3&l=$4&m=$5&n=$6 [QSA,L,NC]

關鍵標誌解析

標誌含義本例作用
C (chain)鏈接下一條規則將規則 1 輸出 (含查詢串) 傳給規則 2
NC (nocase)忽略大小寫兼容 URL 大小寫變體
QSA (qsappend)追加查詢串保留原有 Query String 合併
L (last)結束重寫規則 2 為終點

驗證測試


# 建立測試腳本 index.php
$v) echo "$k = $v
"; ?> # 訪問 https://localhost/test/a1b2c3d4e5f6g7h8i9j10k11l12m13n14 # 或 https://localhost/test/index-1-2-3-4-5-6-7-8-9-10-11-12-13-14.html # 預期輸出 a=1 b=2 ... n=14 全部顯示

擴展至 N 參數通用模板


# 通用邏輯:每 9 參數一條規則,最後一條帶 [L]
# 規則 1: 參數 1-9  → 輸出 $9&p1=$1...p8=$8
# 規則 2: 參數 10-18 → 輸出 $9&p9=$1...p17=$8  (輸入為規則1輸出)
# ...
# 規則 k: 最後 ≤9 參數 → index.php?$9&... [QSA,L]

注意事項

  1. 正則 (.*?) 非貪婪匹配,避免跨分隔符吞噬。
  2. 參數值含特殊字符需在應用層 urldecode,Rewrite 層不解碼。
  3. 極長 URL 可能觸發 LimitRequestLine (預設 8190 bytes),同步調大 LimitRequestFieldSize。

掌握 [C] 鏈接技法,讓 Apache Rewrite 突破 9 參數桎梏,支援任意複雜偽靜態結構。

Copyright © Windows教程網 All Rights Reserved