當我將多個RewriteCond鏈接在一起時,只有最後一個RewriteCond的捕獲組可以參考%0
- %9
。重寫規則中的多個RewriteCond的參考捕獲組
在以下問題中,url的查詢字符串中的參數可以以任意順序排列。爲了解析它們變成一個奇特的網址,我需要每一個參數在單獨的查詢字符串匹配:
RewriteCond %{QUERY_STRING} param1=([^&]+)
RewriteCond %{QUERY_STRING} param2=([^&]+)
RewriteCond %{QUERY_STRING} param3=([^&]+)
RewriteRule ^foo$ bar/%1/%2/%3/ [R]
就像我指出...這是行不通的。爲了解決這個問題,我可以引用前面的RewriteCond的捕獲組在接下來的RewriteCond和每個參數「傳播」實際重寫規則:
RewriteCond %{QUERY_STRING} param1=([^&]+)
RewriteCond %1&%{QUERY_STRING} ^([^&]*)&.*param2=([^&]+)
RewriteCond %1&%2&%{QUERY_STRING} ^([^&]*)&([^&]*)&.*param3=([^&]+)
RewriteRule ^foo$ bar/%1/%2/%3/ [R]
這應該工作,但是對於每個附加參數得到它的混亂。另一種解決方案可能是解析一個參數,並在每個參數後重定向客戶端(導致冗長的重定向鏈,這是我想避免的)。
是否有訪問的重寫規則所有的RewriteCond的捕獲組的更清潔的方式(例如,是否有可能給它們命名或將其分配給一個變量,所以我可以在其他地方引用它們?)
+1的一個很大的問題。我也遇到了這個問題,並且很想知道答案 – anubhava
mod_rewrite文檔說RewriteCond反向引用只保留當前條件集中最後一個匹配的RewriteCond **,所以,你的第二個答案可能是隻能在這條路線上回答。鑑於它的複雜性,你有沒有想過在'foo'上設置一個解析GET或POST的腳本並重定向到相應的'bar'? – miah