天天看點

記一次配置rewrite和return的經曆

自動電商平台歸屬了大資料研究院之後,我又恢複了那個“把nginx當成爸爸”的日子。開發不斷地提出了的要求,我一樣一樣的疲命應付,并且在應付後記錄下來,就怕以後再遇到類似的問題。

這次的需求是一個跳轉,滿足某個條件之後把<code>“http://dvlshop.lechange.com/index.php/wap/?client_id=lc_mall_m&amp;redirect_uri=https%3A%2F%2Fdvlshop.lechange.com%2Fopenapi%2Ftrustlogin_api%2Fparse%2Fwap_trustlogin_lecheng%2Fcallback&amp;response_type=code&amp;scope=read&amp;state=http%3A%2F%2Fdvlshop.lechange.com%2Findex.php%2Fwap&amp;user=token%2Flcid_9f9lmo2u6i7hkl6t6eaodn2blmg5jbsg&amp;expire=1514191636&amp;source_type=lc_app&amp;nonce=cdizHO6uvSx5JK79Kmtz5RBpSi0ROhpF&amp;signature=VeCceYCWDE6BZjIdni/68YCmhqc=%27 ”</code>

改成

<code>“http://dvlshop.lechange.com/index.php/wap/?client_id=lc_mall_m&amp;redirect_uri=https%3A%2F%2Fdvlshop.lechange.com%2Fopenapi%2Ftrustlogin_api%2Fparse%2Fwap_trustlogin_lecheng%2Fcallback&amp;=code&amp;scope=read&amp;state=http%3A%2F%2Fdvlshop.lechange.com%2Findex.php%2Fwap&amp;user=token%2Flcid_9f9lmo2u6i7hkl6t6eaodn2blmg5jbsg&amp;expire=1514191636&amp;source_type=lc_app&amp;nonce=cdizHO6uvSx5JK79Kmtz5RBpSi0ROhpF&amp;signature=VeCceYCWDE6BZjIdni/68YCmhqc=%27”</code>

具體條件是:

先判斷是否有source_type=lc_app;

再判斷是否有response_type;

如果以上兩個都滿足,将“response_type”改成“+auto+”;

各位看官,我了解你們此時不想繼續看下去的心情,其實我當初看着那麼一大坨uri心裡也直犯鬧,但是沒辦法,“食君之祿,分君之憂”,我隻能耐着性子一個一個的拆開,還别說,拆開的話就清晰許多了,如下:

client_id=lc_mall_m&amp;

redirect_uri=https%3A%2F%2Fdvlshop.lechange.com%2Fopenapi%2Ftrustlogin_api%2Fparse%2Fwap_trustlogin_lecheng%2Fcallback&amp;

response_type=code&amp; <code>#滿足條件的話把這個改成+auto+</code>

scope=read&amp;

state=http%3A%2F%2Fdvlshop.lechange.com%2Findex.php%2Fwap&amp;

user=token%2Flcid_9f9lmo2u6i7hkl6t6eaodn2blmg5jbsg&amp;

expire=1514191636&amp;

source_type=lc_app&amp;

nonce=cdizHO6uvSx5JK79Kmtz5RBpSi0ROhpF&amp;signature=VeCceYCWDE6BZjIdni/68YCmhqc=%27

針對這次需求我的計劃是這樣的:把原位址看成"$1+ response_type +$2"這樣的一個樣式,确定$1和$2,然後rewrite成"$1+ +auto+ +$2"不就搞定了麼? 于是乎我就憑着我那二把刀的nginx技術開始動手。折騰了大約半個小時,拿出來這樣一個配置:

但是很不幸,<code>nginx -s reload</code>之後的結果是“$1+$2+$1+ response_type +$2”的格式(位址太長太惡心了,我就不寫了)。

然後在arstercz大神的指點下,把那句rewrite改成了<code>return 301 http://dvlshop.lechange.com/index.php/wap/?$id$query;</code>。就達到了效果。

要麼就

PS,這裡補充一下uri、request_uri、document_uri之間的差別:

$request_uri: /stat.php?id=1585378&amp;web_id=1585378

$uri: /stat.php (不帶?後面)

$document_uri: /stat.php (與uri完全相同)

最後的最後,如果您覺得本文對您升職加薪有幫助,那麼請不吝贊助之手,刷一下下面的二維碼,贊助本人繼續寫更多的博文!

記一次配置rewrite和return的經曆

 本文轉自 蘇幕遮618 51CTO部落格,原文連結:http://blog.51cto.com/chenx1242/2059740