nginx 将 /2013/04/test.html 重定向到 /test - 不起作用

nginx 将 /2013/04/test.html 重定向到 /test - 不起作用

我一直在思考这个问题。如何在 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;
    }
}

相关内容