2014-10-28 54 views
1

我想改寫這個URL(是的,URL有一個問號):domain.com/blog/blogdetail?id=20Nginx的重寫與問號

這樣:domain.com/train/my-page

這是我現在,但它不工作:

location /blog { 
    rewrite ^/blog/blogdetail(.*)id=20$ $scheme://$host/train/my-page permanent; 
} 

我不確定是怎麼回事。我嘗試過location /blog/並在正則表達式中跳過/。

任何想法我失蹤或另一種方式去做這件事?基本上,我有一堆具有特定ID#的頁面,我需要重寫它們各自的「基於字的」URL。

+0

告訴你什麼是你的預期產出。 – depsai 2014-10-29 04:51:12

+0

Nginx僅重寫uri的「路徑」部分而無需查詢。 – 2014-10-29 10:49:14

+0

@depsai我的預期產出是問題的第一部分。 – shlant 2014-10-29 15:46:33

回答

2

你在這裏有錯誤的邏輯,它應該是一個乾淨的URL重寫到一些花哨的內部,而不是相反。你們之間也應該有一個乾淨的關係。

無論如何,nginx在大部分指令中都不匹配參數,包括位置和重寫。更簡單的方法是通過map指令。

map $request_uri $target_uri { 
    "~/blog/blogdetail\?id=20$" "/train/my-page"; 
} 

server { 

    ... 

    location /blog { 
     rewrite ^/blog/blogdetail$ $scheme://$host$target_uri? permanent; 
    } 

}