【发布时间】:2013-03-29 13:17:55
【问题描述】:
我正在开发 nginx 网络服务器。
我想重定向文件夹 1 www.site.com/folder1/ 中的所有网址,但不重定向子文件夹 1 www.site.com/folder1/subfolder1
我为 nginx 配置创建了这些规则,但没有运气。
位置 = /文件夹/子文件夹 {
}
位置/文件夹{
重写 ^/folder(.*) www.redirect.com 永久;
}
我错过了什么吗?
【问题讨论】:
我正在开发 nginx 网络服务器。
我想重定向文件夹 1 www.site.com/folder1/ 中的所有网址,但不重定向子文件夹 1 www.site.com/folder1/subfolder1
我为 nginx 配置创建了这些规则,但没有运气。
位置 = /文件夹/子文件夹 {
}
位置/文件夹{
重写 ^/folder(.*) www.redirect.com 永久;
}
我错过了什么吗?
【问题讨论】:
好的,这是一个精致的答案,包括我读过的一些 cmets 以及我的一个,
为了能够访问子文件夹中的资产,我添加了 try_files 和 301 重定向为重定向添加了所有其他 url。
location /folder/subfolder {
try_files $uri $uri/ =404;
}
location /folder {
return 301 $scheme://example.com;
}
【讨论】:
您的新规则集应如下所示。我假设有效的文件命中是可以的(即用户知道文件)。如果您不想要这种行为,请将 try_files 替换为 @rw 块的内容:
location /folder {
try_files $uri $uri/ @rw;
}
location @rw {
rewrite ^/folder/([^\/]*) http://www.redirect.com/ permanent;
}
这些应该可以工作。
【讨论】:
删除“=”,因为那是“精确”匹配。所以它只匹配文件夹本身,并且对“/folder/subfolder/a_file.html”的请求不会匹配该块。您还需要在重写规则中添加 $scheme。如果你只是想重定向到主页(http://www.redirect.com),你可以去掉“$1”部分。
location /folder/subfolder {
}
location /folder {
rewrite ^/folder(.*)$ $scheme://www.redirect.com$1 permanent;
}
【讨论】: