Nginx重定向的參數(shù)問(wèn)題
在給某網(wǎng)站寫rewrite重定向規(guī)則時(shí),,碰到了這個(gè)關(guān)于重定向的參數(shù)處理問(wèn)題。默認(rèn)的情況下,,Nginx在進(jìn)行rewrite后都會(huì)自動(dòng)添加上舊地址中 的參數(shù)部分,而這對(duì)于重定向到的新地址來(lái)說(shuō)可能是多余。雖然這也不會(huì)對(duì)重定向的頁(yè)面顯示結(jié)果造成多少影響,,但當(dāng)你注意到新地址中包含有多余的 “?xxx=xxx”時(shí),心里總還是會(huì)覺(jué)得不爽,。而且可能影響到網(wǎng)站的搜索優(yōu)化SEO,。那么該如何來(lái)處理這部分的內(nèi)容呢?看了下面兩個(gè)簡(jiǎn)單的例子你就會(huì)明 白了,。
例如: 把http:///test.php?id=xxx 重定向到 http:///xxx.html 把我郁悶了好久,,最后在谷大神那里找到了一片文章解決了。
這是剛開(kāi)始的規(guī)則: if ($query_string ~* "id=(\d+)$") { set $id $1; rewrite /art_list\.php /article/category-$id.html permanent; rewrite ^/goods\.php /goods/$id.html permanent; rewrite ^/category\.php /products/$id.html permanent; rewrite ^/child_cat\.php /category/$id.html permanent; rewrite ^/art\.php /article/$id.html permanent; rewrite ^/art_list\.php /article/category-$id.html permanent; rewrite ^/artid\.php /help/$id.html permanent; rewrite ^/article\.php /affiche/$id.html permanent; }
發(fā)現(xiàn)問(wèn)題: 重定向的地址都是 xxx.html?id=xxx 最后我修改了參數(shù): if ($query_string ~* "id=(\d+)$") { set $id $1; rewrite /art_list\.php /article/category-$id.html? permanent; rewrite ^/goods\.php /goods/$id.html? permanent; rewrite ^/category\.php /products/$id.html? permanent; rewrite ^/child_cat\.php /category/$id.html? permanent; rewrite ^/art\.php /article/$id.html? permanent; rewrite ^/art_list\.php /article/category-$id.html? permanent; rewrite ^/artid\.php /help/$id.html? permanent; rewrite ^/article\.php /affiche/$id.html? permanent; } 結(jié)果正常了,。
注意,,關(guān)鍵點(diǎn)就在于“?”這個(gè)尾綴,。重定向的目標(biāo)地址結(jié)尾處如果加了?號(hào),則不會(huì)再轉(zhuǎn)發(fā)傳遞過(guò)來(lái)原地址的問(wèn)號(hào)?后面的參數(shù)那部分,。 假如又想保留某個(gè)特定的參數(shù),,那又該如何呢?可以利用Nginx本身就帶有的$arg_PARAMETER參數(shù)自行補(bǔ)充來(lái)實(shí)現(xiàn),。 例如: 把http:///test.php?para=xxx&p=xx 重寫向到 http:///new.php?p=xx 可以寫成:rewrite ^/test.php /new.php?p=$arg_p? permanent;
[全文結(jié)束]
參考文章: 原始的動(dòng)態(tài)頁(yè)面需要給個(gè)301永久重定向到靜態(tài)頁(yè)面上,,以告訴搜索引擎將原始的頁(yè)面的權(quán)重轉(zhuǎn)到新的靜態(tài)頁(yè)面下。 if ($query_string ~* "id=(\d+)$") { set $id $1; rewrite ^/goods\.php /goods/$id.html permanent; } 這樣重定向后發(fā)現(xiàn) 當(dāng)輸入/goods.php?id=254訪問(wèn)的時(shí)候會(huì)跳轉(zhuǎn)到/goods/254.html?id=254下,, 后面看見(jiàn)搜索引擎的收錄地址也添加了后面不必要的參數(shù),,必須去掉后面參數(shù)。那該怎么來(lái)處理呢,? 例如: 把http://examplecom/test.php?para=xxx 重定向到http://examplecom/new 若按照默認(rèn)的寫法:rewrite ^/test.php(.*) /new permanent; 重定向后的結(jié)果是:http://examplecom/new?para=xxx 如果改寫成:rewrite ^/test.php(.*) /new? permanent; 那結(jié)果就是:http://examplecom/new 所以,,關(guān)鍵點(diǎn)就在于“?”這個(gè)尾綴,。假如又想保留某個(gè)特定的參數(shù),,那又該如何呢?可以利用Nginx本身就帶有的$arg_PARAMETER參數(shù)來(lái)實(shí)現(xiàn),。 例如: 把http://examplecom/test.php?para=xxx&p=xx 重寫向到http://examplecom/new?p=xx 可以寫成:rewrite ^/test.php /new?p=$arg_p? permanent; 來(lái)源:http://www./blog/b/15359/ PS:關(guān)于判斷獲取參數(shù) if ($query_string ~* "appId=(\d+)$") { set $id $1; rewrite ^/show/index/.* /rewrite/htmlrewrite/$id.html; }
|