如何重写路径?

时间:2017-02-01 00:45:44

标签: nginx

如何编写从http://127.0.0.1:8888/storage/app/media/http://127.0.0.1:8888/v/的路径?

并在其后留下任何文件名和扩展名。

我试过了:

location /v {
    rewrite ^/v /storage/app/media/ last;
}


location /v {
    proxy_pass http://127.0.0.1:8888/storage/app/media/;
}


location /v {
    proxy_pass http://127.0.0.1:8888;
    rewrite ^/v /storage/app/media/ last;
}


location ~ ^/v/(.*) {
    rewrite ^/storage/app/media(.*) /v/$1 last;
}


location ~ ^/v/(.*) {
    return 301 /storage/app/media/$1;
}

转到http://127.0.0.1:8888/v/file.mp4会显示未找到页面。

http://127.0.0.1:8888/storage/app/media/file.mp4仍会显示网址而不会重写。

修改

我能够用

掩盖路径
rewrite ^/v/(.*)$ /storage/app/media/$1 last;

我现在如何将/ storage / app / media重定向到/ v /?

我试过了:

location ~ ^/storage/app/media(.*) {
    return 301 /v/$1;
}

1 个答案:

答案 0 :(得分:0)

似乎你想要:

  1. 访问/storage/app/media/xxx的客户重定向到/v/xxx
  2. /v映射到/path/to/storage/app/media下的物理文件。
  3. 您可以使用rewrite...last/v映射到/storage/app/media(正如您所发现的那样),但这意味着您的服务器必须同时接受这两个URI,这样可以实现(1)循环可能但很棘手。

    另一种方法是改为使用alias

    location /v {
        alias /path/to/storage/app/media;
    }
    
    location /storage/app/media {
        rewrite ^/storage/app/media(.*)$ /v$1 permanent;
    }
    

    有关详细信息,请参阅this document