Apache-2.2
ModRewrite 9 反向參考限制
這是一個複雜的問題,我希望有一個簡單的答案……
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