2017-04-05 170 views
1

我剛剛需要被改寫成nginx的Nginx的重寫URL包含特殊字符

example.com/cms.php/inspiration?fullsize >/
example.com/shop/?category_id=27 > /garden/cushion.html 
example.com/shop/?2008=1&vare_id=10553&variant_id=2232 > /garden/cushion/black.html 

我用下面的

簡單的重寫

rewrite /shop/?category_id=27 /garden/cushion.html permanent; 

位置重寫嘗試的URL列表

location /shop/?category_id=27 { 
    rewrite /shop/?category_id=27 /garden/cushion.html; 
} 

個,因地點在那裏我評論專用標誌

location /shop/\?category_id=27 { 
    rewrite /shop/\?category_id=27 /garden/cushion.html; 
} 

我直接添加到server {...}在nginx的配置

回答

1

首先,從?東西開始是查詢字符串而不是標準化的一部分由rewritelocation指令使用的URI。

實現目標的一種方法是使用map指令測試$request_uri變量。

例如:

map $request_uri $redirect { 
    default          0; 
    /cms.php/inspiration?fullsize    /; 
    /shop/?category_id=27      /garden/cushion.html; 
    /shop/?2008=1&vare_id=10553&variant_id=2232 /garden/cushion/black.html; 
} 
server { 
    ... 
    if ($redirect) { return 301 $redirect; } 
    ... 
} 

this document查看更多,和this caution對使用​​if

+0

謝謝,與映射 – Martin