演示網址: https://demo.wdssmq.com/?id=2887
對於如上地址,在 Apache 下可以使用如下規則重定向(301)到偽靜態地址。
RewriteCond %{QUERY_STRING} ^id=(.+)$ # 這裡的引用是 %1 而不是 $1
RewriteRule ^$ %{REQUEST_SCHEME}://%{HTTP_HOST}/post/%1.html [L,R=301]
至於 Nginx,同時有$query_string
與$args
兩個變量用於獲取網址參數,效果好像是一樣的;
注:$arg_id.html
後的?
表示跳轉後不攜帶原來的網址參數;
# page + post
if ($args ~* "id=\d+") {
rewrite ^/$ $scheme://$host/post/$arg_id.html? permanent;
}
↑↑上述代碼的 if 語句中使用了正則判斷,但是並沒有對匹配結果進行捕獲,而是使用了$arg_id
直接獲取到了相應值,同理其他參數也可以使用$arg_參數名
來獲取。
演示地址實際跳轉了兩次,第二次由 id 跳轉到了別名,該效果由插件 [改版助手 - Z-Blog 應用中心] 實現。。
2022-05-11:
當年寫這篇記錄時還沒弄 md2zb 體系來發文章,然後因為 301 會被瀏覽器緩存,清理的時候一併清掉了登錄狀態,結果編輯好文章發布時失敗了。。
正確的清理姿勢見:「水坑」瀏覽器內清理特定網站的 301 緩存_電腦網絡_沉冰浮水