Nginx重写 - 在路径和网址结束段

时间:2017-11-08 16:27:40

标签: nginx

我目前有一些简单的规则来更改某些已更改的链接的URL路径。但是我需要在' $ 1'

上进行查找和替换

是否可能

我尽可能地在下面概述了它......

//当前规则

location ~ ^/simpsons-mirrors/(.*) {
return 301 /simpsons-london/$1;
}

location ~ ^/simpsons-mirrors(.*) {
return 301 /simpsons-london;
}

需要这样做:

/simpsons-mirrors/simpson-morrors-something-else-whatever-blah
to
/simpsons-london/simpsons-london-something-else-whatever-blah

1 个答案:

答案 0 :(得分:0)

您可以使用regular expression back-reference找到以前的捕获。反向引用包括反斜杠后跟捕获的编号,例如:

rewrite ^/(simpsons-mirrors)/\1(.*)$ /simpsons-london/simpsons-london$2 permanent;

第一次捕获包含搜索文本,然后第二次匹配。第二个捕获包含附加到目标的URI的其余部分。

您可以使用map directive创建一般解决方案。

例如:

map $request_uri $to_text {
    default                    0;
    ~*^/simpsons-mirrors(/|$)  simpsons-london;
}
server {
    ...

    if ($to_text) {
        rewrite ^/([^/]+)/\1(.*)$ /$to_text/$to_text$2 redirect;
        rewrite ^/([^/]+)$ /$to_text redirect;
    }

在上述情况下,搜索文本只是第一对/之间的文本,但替换文本是从地图中获取的。

第二个rewrite处理你问题中的第二个案例。