例如
旧页面
http://sitedomain.co.uk/content/unique-page-name
新页面
http://sitedomain.co.uk/new-name/unique-page-name
请注意,我不希望内容页面中的所有内容都被重定向,但实际上只是上面提到的网址。我大约要设置9个重定向,但都不适合某个模式。
谢谢!它重定向时没有斜线的事实:
if ( $request_filename ~ content/unique-page-name/ ) {
rewrite ^ http://sitedomain.co.uk/new-name/unique-page-name/? permanent;
}
,但这重定向到:
http://sitedomain.co.uknew-name/unique-page-name/
#1 楼
陷阱和常见错误的直接报价:税收重写:通过使用return指令,我们可以完全避免对正则表达式求值。使用
return
而非rewrite
进行永久重定向。这是我使用此用例的方法... location = /content/unique-page-name {
return 301 /new-name/unique-page-name;
}
#2 楼
理想情况下,如果可以避免,则不应使用if语句。这样的事情可能会起作用(未试用)。location ~ /content/(.*)$ {
rewrite ^ /new-name/?$args permanent;
}
评论
那不会捕获内容目录中的所有内容吗?我只想重定向单个项目。例如,我在内容目录中还有另一个项目,但是我需要将其重定向到... / another-new-name / unique-page-name2
– SteveEdson
13-10-25在9:20
我已经解决了原来它正确重定向,但是脚本被击中之后才处理URL。
– SteveEdson
13-10-25在9:31
啊,我误解了这个问题。我以为您只希望更改内容部分。原理保持不变。我很高兴为您工作。
–́Gevious
13-10-25在9:37
没问题,不过感谢您的帮助,我以后肯定需要使用它。
– SteveEdson
13-10-25在9:54
#3 楼
我使用以下解决方案:rewrite ^(/content/unique-page-name)(.*)$ http://sitedomain.co.uk/new-name/unique-page-name/ permanent;
请客。
#4 楼
对我来说,它没有这样的等号就可以工作:location /old-url {
return 301 /new-url;
}
评论
您根本不需要位置限制。只需使用重写。请参阅@SteveEdison的答案。
–PKHunter
17-2-26在0:46
@PKHunter根据NGINX最佳实践,实际上返回301是遵循的最佳方法。 nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/…
– Cristian E.
20-10-21在9:39
#5 楼
它对我有用。server {
listen 80;
location = /content/unique-page-name {
return 301 http://sitedomain.co.uk/new-name/unique-page-name;
}
}
评论
绝对更具可读性。这还会保留原始URL上的任何查询吗?
– SteveEdson
13-10-25在9:56
我认为Nginx中使用if语句不好是正确的吗?与使用重写方法相比,这还是更好的做法吗?
– SteveEdson
13-10-25在10:10
将if与return指令一起使用是完全可以的。参见wiki.nginx.org/IfIsEvil。是的,IMO,比使用重写更好。
–波西·卡利穆图(Pothi Kalimuthu)
13-10-25在10:22
为什么返回……而不是重写……永久;进行永久重定向?是否有理由为什么应该这样呢?在当前答案中,不再有if语句,为什么?
–luckydonald
20年8月5日,11:30
请参阅答案中引用的文字。
–波西·卡利穆图(Pothi Kalimuthu)
20年8月6日,下午1:23