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

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;
}

但这会重定向到:

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/$1?$args permanent;
} 

答案3

我使用了以下解决方案:

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

效果很好。

答案4

这个对我有用。

server {
  listen 80;

  location = /content/unique-page-name {
    return 301 http://sitedomain.co.uk/new-name/unique-page-name;
  }
}

相关内容