国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

nginx 配置$Query String

2024-06-28 16:01:26
字體:
來源:轉載
供稿:網友

實際開發中經常有根據請求參數來路由到不同請求處理者的情況,根據POST請求參數需要些nginx插件,這里主要簡單介紹下如何根據GET參數來路由。

1、location進行路徑

最常見的是通過location進行路徑匹配的時候,沒辦法是用正則表達一起捕獲這個路徑和querstring的。那么我想真的URL里面的Query String進行不同的rewrite,應該如何處理呢?答案就是$arg變量。Nginx里面$query_string 與$args相同,存儲了所提交的所有$query_string;比如&p=2887&q=test如果想要在nginx里面單獨訪問這些變量。可以這樣比如$p變量可以這樣訪問 $arg_p

2、rewrite:

需求用到rewrite 其中有一個是要把a.php?id=2重定向到b-2.html開始簡單的寫為rewrite "^/a(.*)?(.*)$"  /b-$2.html  permanent;總是不能正確的301到b-2.html查資料發現

rewrite只能針對請求的uri進行重寫,/a.php問號后面的是請求參數,在nginx用$query_string表示,直接寫這樣的一條重寫肯定不會正確匹配,因為rewrite參數只會匹配請求的uri,在寫重寫的時候需要把$query_string變量追加到重寫的uri后面,為了防止uri中的參數追加到重寫后的uri,可以在后面加個問號:

if ($query_string ~ "id=(.*)") {    set  $id  $1;    rewrite ^/a.php$ /b-$id.html? permanent;}

【示例1】

比如我們希望訪問http://192.168.71.51:6061/do1.aspx?t=1212&c=uplog當url中的參數c為config或uplog的時候(忽略大小寫)我們路由到其他地方:

下面是用這樣一個實例講述一下。

首先增加一個upstream:

……upstream other {      server 192.168.71.41:2210;     }……

在location中加入判斷:

……location / {        if ( $query_string ~* ^(.*)c=config/b|uplog/b(.*)$ ){         PRoxy_pass                  http://other;        }……【示例2】要求是 如果請求中的$query_string包含"q=數字",301重新定向到首頁交由index.php處理。否則只是301重新定向到首頁。

location ~* ^/wap/ {#               if ( $http_user_agent ~* "(MSIE|bot|Spider|Slurp)" ) {#               }                if ($args ~* "p=/d+$") {                        rewrite ^ $scheme://$host/?p=$arg_p? permanent;                }                #Rewrite 后面帶一個?表示在重定向中使用query_tring                rewrite ^/(.*)$ $scheme://$host/<del datetime="2012-01-24T14:18:20+00:00">?</del> permanent; }注:關于rewrite后面的問號,其作用是去除后面的qrerystring,不加?的話,就是這樣的比如原來的query_string是p=2887,不加問號的話 是重新定向到http://ihipop.info/?2887&p=2887 多了一個&p=2887這樣產生的 URI 不是很美觀。

【示例3】

    location / {        if ( $query_string ~* "p=/d+$" ) {               proxy_pass                  http://www.ifeng.com;        }        proxy_pass                  http://www.baidu.com;    }通過如上配置,當訪問nginx時,如果后面帶有p=數字的參數(http://10.153.140.42/?p=1),就會跳轉到ifeng,否則跳轉到baidu。


上一篇:aws 應對 retire

下一篇:Gitlab安裝

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 明光市| 铜山县| 芦溪县| 瑞丽市| 乃东县| 青阳县| 大石桥市| 华池县| 砀山县| 漳浦县| 巴东县| 怀宁县| 芜湖县| 丰台区| 中阳县| 无极县| 贞丰县| 靖西县| 淄博市| 常熟市| 合作市| 松阳县| 新安县| 邢台县| 佛山市| 彩票| 龙南县| 富平县| 安福县| 钟山县| 商河县| 永丰县| 平湖市| 公主岭市| 丰县| 临澧县| 精河县| 资溪县| 尤溪县| 黑龙江省| 滨海县|