Nginx:重写以删除$ uri的最后一条路径

时间:2014-01-09 09:09:30

标签: nginx

我正在将所有文档从/docs/path/to/sub/*.pdf移动到其父文件夹/docs/path/to/*.pdf

如何从旧网址重定向:

example.com/docs/path/to/sub/file.pdf

到新网址

example.com/docs/path/to/file.pdf

我正在使用以下方法但不能正常工作:

location /docs/ {
  rewrite ^/docs/([a-zA-Z_]+)/([a-zA-Z_]+)/([a-zA-Z_]+)/([a-zA-Z_]+)\.(.*)$  /docs/$1/$2/$3/$5 permanent;
}

1 个答案:

答案 0 :(得分:0)

您正在使用permanent标记,这意味着重定向,重定向后网址可能会返回404,尝试将permanent替换为last并查看其是否有效。

修改

我认为你的错误是你正在匹配扩展,所以你做的计数错了,你没有足够的捕获块。我想以更动态的方式做到这一点,不确定这是否有效。

location ^~ /docs(.*)/([^/]+)/(.*) {
    try_files $uri @redirect;
}
location @redirect {
    return 301 $scheme$http_host/docs$1$3;
}

如果没有,你可以改变你当前的重写,假设你有5个捕获块,

/docs/$1/$2/$4$5

最后2个是文件+扩展名