對此我很頭痛。我有一個舊網址:
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。我發現的所有樣本都描述了相反的情況。將「漂亮」的 URL 發送給醜陋的 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]
奇蹟般有效