我正在嘗試從一個 url 重定向到另一個 url 但保留查詢。例如,從
/oldurl?query1=yes&query2=yes&... (or any list of queries)
到
/newurl?fixedquery=yes&query1=yes&query2=yes&...
因此,在實踐中,它將舊 url 及其查詢重定向到新 url,保留舊查詢以及固定查詢。
這是我一直試圖在 .htaccess 中使用(未成功)的內容:
RedirectMatch 301 /oldurl/?$ newurl/?fixedquery=yes&$1
在使用 Rewrite 之前我也嘗試過
RewriteCond %{QUERY_STRING} ^fixedquery=yes$
RewriteRule ^oldurl/?$ newurl/? [R=301,L]
但這只是重定向 if for /oldurl(添加fixedquery)并給出 404,以防我將查詢傳遞給 oldurl(例如/oldurl?var1=1)。
我哪里錯了?
uj5u.com熱心網友回復:
您需要使用 mod_rewrite 來操作查詢字串。請嘗試以下操作:
RewriteRule ^oldurl/?$ /newurl?fixedquery=yes [QSA,R=301,L]
您的示例 URL 省略了目標 URL 上的尾部斜杠,所以我在這里省略了它。但是,在您的指令中,您是否包括它?
該QSA標志附加/合并請求中的原始查詢字串。因此,生成的 URL 是初始請求/newurl?fixedquery=yes&query1=yes&query2=yes&...中query1=yes&query2=yes&...傳遞的 URL。
更新:請注意,在任何現有的重寫之前,此規則需要靠近檔案頂部。檔案中指令的順序.htaccess可能很重要。首先使用 302(臨時)重定向進行測驗,以避免潛在的快取問題。并且您需要確保在測驗之前清除瀏覽器快取。
看看你的嘗試...
RedirectMatch 301 /oldurl/?$ newurl/?fixedquery=yes&$1
( RedirectMatchmod_alias) 指令僅與 URL 路徑匹配,但您在正則運算式中沒有捕獲子組,因此$1反向參考始終為空。
RewriteCond %{QUERY_STRING} ^fixedquery=yes$ RewriteRule ^oldurl/?$ newurl/? [R=301,L]
這匹配請求/oldurl?fixedquery=yes并重定向到newurl/- 完全洗掉查詢字串。但是,這也依賴于RewriteBase設定,否則這將導致格式錯誤的重定向,從而暴露您的目錄結構。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/459211.html
