當來源包含“?”時重寫規則

當來源包含“?”時重寫規則

對此我很頭痛。我有一個舊網址:

     http://myserver/blog/archive?openview&type=Category&key=Demo

和一個新的網址

     http://myserver/blog/categories/Demo

我正在嘗試為此制定重寫規則。我以為會是:

     ^/blog/archive\?openview&type=Category&key=(.*) /blog/categories/$1.html [NC,R=301,L]

但這沒有任何作用。我嘗試了 URL 和規則(將 ? 替換為 /):

     http://myserver/blog/archive/openview&type=Category&key=Demo
     ^/blog/archive/openview&type=Category&key=(.*) /blog/categories/$1.html [NC,R=301,L]

這按預期工作。所以我有點困惑該如何處理?用於匹配舊 URL。我發現的所有樣本都描述了相反的情況。將「漂亮」的 U​​RL 發送給醜陋的 URL。就我而言,「醜陋」的 URL 是過去人們添加書籤的 URL,我想確保他們能夠正確獲取新數據

答案1

一點思考(和閱讀文件) 之後:

mod_rewrite 符合僅使用 URL 的位置部分。這 ”?”標記位置的結束和參數的開始(也稱為查詢字串)。當我意識到這一點時,這只是距離谷歌只有一步之遙

因此,要正確轉換,您需要一個重寫條件:

RewriteCond %{QUERY_STRING}     ^openview&type=Category&key=(.*)    [NC]
RewriteRule ^/blog/archive$ /blog/categories/%1.html [NC,R=301,L]

奇蹟般有效

相關內容