Nginx 将一条路径重定向到另一条路径

Ste*_*son 70 rewrite nginx

我确定以前有人问过这个问题,但我找不到有效的解决方案。

一个网站切换了CMS服务,但是域名相同,如何设置单个页面的nginx重写?

例如

旧页面

http://sitedomain.co.uk/content/unique-page-name

新的一页

http://sitedomain.co.uk/new-name/unique-page-name

请注意,我不希望内容页面中的所有内容都被重定向,而实际上只是上面提到的 url。我有大约 9 个重定向要设置,其中不适合某个模式。

谢谢!

编辑:我找到了这个解决方案,它似乎有效,除了它没有斜线重定向:

if ( $request_filename ~ content/unique-page-name/ ) {
   rewrite ^ http://sitedomain.co.uk/new-name/unique-page-name/? permanent;
}
Run Code Online (Sandbox Code Playgroud)

但这会重定向到:

http://sitedomain.co.uknew-name/unique-page-name/

Pot*_*thu 110

直接引用陷阱和常见错误:征税重写

通过使用 return 指令,我们可以完全避免对正则表达式的评估。

请使用return代替rewrite永久重定向。这是我对这个用例的方法......

location = /content/unique-page-name {
  return 301 /new-name/unique-page-name;
}
Run Code Online (Sandbox Code Playgroud)

  • 它绝对更具可读性。这是否还会保留原始 URL 上的任何查询? (3认同)

小智 23

理想情况下,如果可以避免,则不应使用 if 语句。像这样的东西可以工作(未经测试)。

location ~ /content/(.*)$ {
    rewrite ^ /new-name/$1?$args permanent;
} 
Run Code Online (Sandbox Code Playgroud)


Ste*_*son 15

我使用了以下解决方案:

rewrite ^(/content/unique-page-name)(.*)$   http://sitedomain.co.uk/new-name/unique-page-name/$2 permanent;
Run Code Online (Sandbox Code Playgroud)

很好用。


小智 12

对我来说,它没有像这样的等号:

location /old-url {
  return 301 /new-url;
}
Run Code Online (Sandbox Code Playgroud)

  • 您根本不需要位置块。只需使用`rewrite`。请参阅@SteveEdison 的回答。 (2认同)
  • @PKHunter 根据 NGINX 最佳实践,实际上返回 301 是最好的方法。https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#taxing-rewrites (2认同)