如上。
最好用一個例子來解釋:
原始網址(引數順序不一致)
- www.myhost.com/my-page?p1=v1&p2=v2&p3=v3
- 或www.myhost.com/my-page?p2=v2&p1=v1&p3=v3
- 或www.myhost.com/my-page?p3=v3&p1=v1&p2=v2
如果我訪問上述 3 個示例 URL 中的任何一個,我想重定向到www.myhost.com/my-page/v1/v2
- p3 被故意忽略,因為它不再需要了。
- 在我的真實世界 URL 中,我有 p4 到 p6 引數,這些引數也被忽略。為簡單起見,我只寫了 p3。
我已經查看/搜索了網路,但沒有任何東西與我正在嘗試做的事情相提并論。謝謝你。
uj5u.com熱心網友回復:
嘗試:
RewriteCond %{REQUEST_URI} ^\/my-page(?:\/|$)
RewriteCond %{QUERY_STRING} (?:^|&)p1\=([^&]*) [OR,AND]
RewriteCond %{QUERY_STRING} (?:^|&)p2\=([^&]*)
RewriteRule ^ /my-page/%1/%2 [R=301,L,QSD]
uj5u.com熱心網友回復:
您可以使用 mod_rewrite 執行以下操作:
RewriteEngine On
RewriteCond %{QUERY_STRING} (?:^|&)p1=([^&] )
RewriteCond %1@%{QUERY_STRING} ^([^@] )@(?:|.*&)p2=([^&]*)
RewriteRule ^/?(my-page)$ /$1/%1/%2 [QSD,R=302,L]
第一個條件捕獲 的值p1并將其傳遞給同樣捕獲 值的第二個條件p2。然后它們分別在替換字串中用作%1和%2反向參考。
URL 引數可以按任何順序出現。
@(在第二個條件中)只是一個不會出現在的任意字符,v1因此v1在搜索p2.
所有其他 URL 引數(即p3.. pN)都將被忽略(并丟棄)。
引數p1必須以非空值存在(否則結果重定向將不明確)。p2也必須存在,但值可以為空。例如。/my-page?p2=&p1=v1仍會成功重定向到/my-page/v1/.
該QSD標志會丟棄請求中的原始查詢字串。
根據使用這些指令的位置(例如目錄或服務器背景關系)以及最終路由 URL 的方式,您可能需要添加初始條件以確保僅處理直接請求(而不是重寫的請求)。
例如,如果需要,添加以下作為第一個條件:
RewriteCond %{ENV:REDIRECT_STATUS} ^$
:
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/336772.html
下一篇:無限地址嵌套
