Apache-2.2

ModRewrite 9 反向參考限制

  • September 20, 2012

這是一個複雜的問題,我希望有一個簡單的答案……

RewriteRule ^category/([^.]+)/([0-9]+)/([^.]+)/([0-9]+) category.php?c_id=$2&filters=$3&_p=$4&name=$1

此規則將選擇 category/kitchen/10/0-0-0-0-0-0-0-0/1

使用以下獲取 val:

category.php?c_id=10&filters=0-0-0-0-0-0-0-0&_p=1&name=kitchen

過濾器儲存在 0-0-0-0-0-0-0-0 的原因是因為有 9 個反向引用限制。每個 0 都是一個不同的過濾器變數,我通過在 $_GET 上進行拆分來訪問它

$$ ‘filter’ $$. 我現在將我的 URL 更改為非 mod 重寫的 URL,以便重寫規則變為:

RewriteRule ^category/([^.]+)/([0-9]+)/([^.]+)/([0-9]+) category.php?c_id=$2&filters=$3&_p=$4&name=$1 [R=301,L]

請注意

$$ R=301,L $$所以它變成了301重定向。 這一切都很好,但我想知道是否有一種巧妙的方法來拆分 0-0-0-0-0-0-0-0 以便每個 0 都是一個 get 變數。所以我可以得到

category.php?c_id=10&f1=0&f2=0&f3=0&f4=0&f5=0&f6=0&f7=0&f8=0&_p=1&name=kitchen

任何想法?

提前致謝!

RewriteCond您可以通過在 a和 a之間拆分正則表達式來使可能的反向引用數量增加一倍RewriteRule。根據您的範例,這將類似於以下內容:

RewriteCond %{PATH_INFO} ^category/[^.]+/[0-9]+/([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)/[0-9]+
RewriteRule ^category/([^.]+)/([0-9]+)/[^.]+/([0-9]+) category.php?c_id=$2&f1=%1&f2=%2&f3=%3&f4=%4&f5=%5&f6=%6&f7=%7&f8=%8&_p=$3&name=$1 [R=301,L]

是的,我知道,這不是最優雅的解決方案,但它應該可以工作。根據您的具體設置,您可能需要稍微玩一下PATH_INFO(例如切換到或類似的東西)。REQUEST_URI

引用自:https://serverfault.com/questions/63068