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/;
...
谁能帮我从 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/;
...