rewrite規則中引數多於9個的處理方式 apache nginx

洋蔥土豆隨心匠發表於2016-12-15

RewriteRule ^index-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)(.*)$ $9&&a=$1&a2=$2&a3=$3&a4=$4&a5=$5&a6=$6&a7=$7&a8=$8 [C,NC]

----第一部分
RewriteRule ^-([0-9]+)-([0-9]+)\.html&&(.*) index\.php\?$3&a9=$1&a10=$2 [QSA,L,NC]

----第二部分

可見10個引數被分成了兩條緊密相連的規則最終把靜態地址1指向了動態地址2,為什麼不能寫成一條呢,因為apache rewrite不支援超過9個引數。注意,後面的[C,NC] 相當於修正符,C代表規則鏈條(chain)未結束,需要拼接下一條規則 L(last) 說明規則結束。需要指出的是“$9&&” ,意思是把第9個括號匹配到的內容(即剩下的2個引數值)連同已經匹配到的8個引數值作為第二條規則的被匹配的物件。

 

rewrite ^/index-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-(?P<f>[0-9]+)(.*).html /index.php?a=$1&a2=$2&a3=$3&a4=$4&a5=$5&a6=$6&a7=$7&a8=$8&a9=$9&a10=$f last;

 注意第10個引數f 通過?P<f>重新命名為f ,當然也可以是其他名字,$f也要改成一致的就行了,如果有第11個引數o3,則在f?(?P<f>[0-9,]*)後面新增o?(?P<j>\d*)即可,對應的a10=$f 後面也要加&a11=$j。nginx 沒有類似於apache 的修正符。

相關文章