我一直在思考这个问题。如何在 nginx 中/2013/04/test.html
重定向某个 URL?/test
我已经尝试过这个:但是没有用:
server {
location /2013/05/test.html {
return 301 http://$server_name/test;
}
}
我进行了一些测试 - 出于某种原因,配置行的位置部分中没有 .html 扩展名的任何 url 都会正确重定向,但是只要我将 .html 放在位置中,kaboom,它就会停止工作。
知道这是为什么吗?谢谢!
答案1
您无需为每个重定向设置一个位置块,而是始终可以将重写规则添加到现有的位置块中:
rewrite /2013/05/test.html http://$server_name/test permanent;
rewrite /2013/05/test2.html http://$server_name/test2 permanent;
您还可以执行各种正则表达式,这样就可以避免每次添加新的“永久链接”时都必须添加新的正则表达式。
答案2
我同意 Jason Ilicic 的说法,使用重写规则可能会更有效率。
如果你真的想使用位置块,您是否尝试过使用“=”修饰符?如果您有多个位置,Nginx 的选择逻辑可能会选择与您期望不同的位置。
来自 Nginx 文档
using the “=” modifier it is possible to define an exact match of URI and location
例如
server {
location = /2013/05/test.html {
return 301 http://$server_name/test;
}
}