我正在嘗試用 Apache 重寫替換 URL 引數值。
RewriteCond ℅{QUERY_STRING} market=value [NC]
RewriteRule ^/page.html /page.html?market=new-value [R=301,L,NC]
URL 模式是https://example.com/page.html?market=value&store=value
我只需要替換引數值并按原樣market保留引數。store
uj5u.com熱心網友回復:
RewriteRule ^/page.html /page.html?market=new-value [R=301,L,NC]
請注意,在 中使用時,模式.htaccess匹配的 URL 路徑不以斜杠開頭,因此上面使用的正則運算式在此背景關系中永遠不會匹配。RewriteRule ^/page.html
請嘗試以下操作:
RewriteCond %{QUERY_STRING} ^(.*&)?(market=)value(&.*)?$
RewriteRule ^/?page\.html$ %{REQUEST_URI}?%1%2new-value%3 [NE,R=301,L]
這market=value會在查詢字串中的任何位置查找 URL 引數名稱/值對。我們捕獲圍繞marketURL 引數值的查詢字串部分(包括引數名稱本身)。這些保存在以下反向參考中:
%1/ 模式- URL 引數之前的(.*&)?查詢字串部分(如果有)。這包括URL 引數名稱之前的分隔符。market&market%2/pattern(market=)- 捕獲文字文本market=。這必須匹配才能成功。這只是節省了以后的重復。%3/ 模式- URL 引數(如果有)之后的(&.*)?查詢字串部分。這包括URL 引數值之后的分隔符。market&market
替換字串中的REQUEST_URI服務器變數包含完整的根相對 URL 路徑。我們使用上面解釋的反向參考重建查詢字串,作為 URL 引數的值注入(替換原來的 this URL 引數)。new-valuemarketvalue
需要( ) 標志來防止NE(URL 引數分隔符)在回應中被 URL 編碼。noescape&
請注意,我從and指令中洗掉了NC( nocase) 標志。URL 引數名稱通常不區分大小寫,并且此規則(如所寫)將保留請求中使用的大小寫。RewriteCondRewriteRule
首先使用 302(臨時)重定向進行測驗以避免潛在的快取問題,即使您稍后將其更改為永久重定向。并且您需要在測驗之前清除瀏覽器快取,因為較早的 301(永久)重定向將被瀏覽器快取。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/513565.html
