Redirect 301在重定向整个域/全部捕获之前重定向Nginx中的特定页面
我有数千页要在nginx中重定向。我可以使用Redirect 301在重定向整个域/全部捕获之前重定向Nginx中的特定页面,redirect,nginx,url-redirection,http-status-code-301,Redirect,Nginx,Url Redirection,Http Status Code 301,我有数千页要在nginx中重定向。我可以使用 return 301 https://www.newdomain.com$request_uri; 然而,我想将大约6页重定向到新域上更改的slug/path,例如 location /old-path/ { rewrite ^ https://www.newdomain.com/newpath/ permanent; } 我已经试过了,但看不出如何先重定向这6个,特别是,然后将“一网打尽”规则应用于其他所有内容 目前,我只使用
return 301 https://www.newdomain.com$request_uri;
然而,我想将大约6页重定向到新域上更改的slug/path,例如
location /old-path/ {
rewrite ^ https://www.newdomain.com/newpath/ permanent;
}
我已经试过了,但看不出如何先重定向这6个,特别是,然后将“一网打尽”规则应用于其他所有内容
目前,我只使用catch all在旧域上重定向,然后让新域上的301s将6条帖子更改为新路径(这6条帖子总共重定向了2条)
我想实现上述目标,不仅是为了将这6个页面的重定向减少到1,还因为我想将这6个页面中的一个重定向到新域上的新路径,但它的旧路径在新域上仍然作为(新)页面存在(因此我需要在旧域上重定向它,而不是在新域上)。例如:
server {
...
rewrite ^/old-path/ https://www.newdomain.com/newpath/ permanent;
rewrite ^/... https://www.newdomain.com/.../ permanent;
return 301 https://www.newdomain.com$request_uri;
}
location / {
return 301 https://www.newdomain.com$request_uri;
}
location /old-path/ {
rewrite ^ https://www.newdomain.com/newpath/ permanent;
}
如果将rewrite
语句包装在location
块中,则return
语句也必须包装在location
块中。例如:
server {
...
rewrite ^/old-path/ https://www.newdomain.com/newpath/ permanent;
rewrite ^/... https://www.newdomain.com/.../ permanent;
return 301 https://www.newdomain.com$request_uri;
}
location / {
return 301 https://www.newdomain.com$request_uri;
}
location /old-path/ {
rewrite ^ https://www.newdomain.com/newpath/ permanent;
}
谢谢@richard,这似乎奏效了!但我注意到,如果我有如下规则:
rewrite^/archive page/https://www.newdomain.com/new1/new2/ 永久的;重写^/存档页/old1/https://www.newdomain.com/new3/ 永久的
然后/archive page/之后的所有内容,例如/archive page/old1/也将重定向到第一条规则。有什么办法可以解决这个问题吗?大家好,我想我用:if($request_uri=“/archive1/”){rewrite^修复了上面的问题https://www.newdomain.com/new1/new2/ 永久;}if($request_uri=“/archive1”){rewrite^https://www.newdomain.com/new1/new2/ 永久;}
我实现了这一点,并且在/archive1/之后的所有内容,例如/archive1/324324/都按照我的其他规则正确重定向。您可以根据需要使正则表达式具体化,更具体的正则表达式应该放在不太具体的正则表达式之前。如果需要精确匹配,请在正则表达式中添加尾随的$
。很抱歉,我不太理解最后一部分-目前conf文件中规则的顺序是:1。if语句规则(其中2条)2。重写规则(约60)3。返回规则(1规则)。我应该改变顺序吗?另外,我想你们是说我可以用$
来优化事情,但再次抱歉,我真的不知道具体放在哪里。它是否替换if语句中的“
?或者,如果我使用$
,我是否不需要if语句(并且可以执行正常的重写规则)-因此它将是rewrite^/archive1/$。。。永久的代码>如果($request_uri=“/archive1/”)
作为正则表达式写入时与^/archive1/$
相同。因此,您的if
块可以替换为rewrite^/archive1/$https://www.newdomain.com/new1/new2/ 永久的代码>