我确信之前已经有人问过这个问题,但我找不到有效的解决方案。
网站已切换 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;
}
}