Nginx用问号重写

时间:2014-10-28 21:56:11

标签: regex nginx rewrite

我正在尝试重写此网址(是的,网址有问号):domain.com/blog/blogdetail?id=20

domain.com/train/my-page

这是我目前所拥有的,但它不起作用:

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

我不确定是什么问题。我已尝试使用location /blog/并转义正则表达式中的/。

我缺少什么想法或其他方式去做?基本上我有一堆具有特定id#的页面,我需要将它们重写为各自的“基于单词的”网址。

1 个答案:

答案 0 :(得分: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;
    }

}