nginx 服务器:如何从 URL 中删除第一个目录

nginx server: how to remove first directory from URL

谁能帮我从 URL 中删除第一个目录名称?

我的图片位置是_data/hotel/3/15377/hotel_image.jpg

但是由于代码中的相对 URL 图像路径被更改,它变成了这样的东西。

example.com/france/_data/hotel/3/15377/hotel_image.jpg example.com/usa/_data/hotel/3/15377/hotel_image.jpg example.com/india/_data/hotel/3/15377/hotel_image.jpg

他们是否有可能从上面删除动态国家/地区名称URL

如果你只想重写这个特定的 URL,你可以在你的配置中使用这个 location 块:

location ~ /[a-z]+/_data/hotel/3/15377/hotel_image.jpg {
    try_files /_data/hotel/3/15377/hotel_image.jpg;
}

如果你想重写导致/<country>/_data/...的所有URL,你可以使用:

location ~ /[a-z]+/_data/(.+) {
    try_files /_data/;
}

或更严格的 URL 检查:

location ~ /(?:france|usa|india)/_data/(.+) {
    try_files /_data/;
}

@Ivan Shatsky 的回答对文件很好,但如果我们想重定向一个一般的 url,如果您使用 rewrite 指令会更好。

根据您定义 rewrite 指令的位置,您有两种实现它的方法:

一个。在 server 上下文中

server {
    ...
    rewrite ^/[a-z]+/_data/(.+)$ /_data/ last;
    ...
}

乙。在 location 上下文中

location ~ /[a-z]+/_data/(.+) {
    rewrite ^/[a-z]+/_data/(.+)$ /_data/ break;
    proxy_pass http://backend;
}

Teo,你为什么将标志更改为 break* 因为,如果将此指令放在 location 上下文中,last 标志可能会使 nginx 到 运行 10 个周期和 return 500 错误。

注:

切记不要在 proxy_pass 指令的末尾添加 /。这个例子行不通:

...
proxy_pass http://backend/;
...