2017-04-05 172 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