微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果请求URI不包含某些单词,如何在nginx中redirect

我正在使用Nginx来提供类似静态消息的页面。 在顶层有https://example.com/en/news/以及文章的概述。 单个项目的URL类似于: https://example.com/en/news/some-article : https://example.com/en/news/some-article

所有URL包含语言,即/en/或/de/ 。 我想创build一个规则,将包含语言的请求redirect到正确的URL(该语言是基于可通过$lang获得的IP映射的)。

以下应该工作(例如):

/news/ --- redirect ---> /en/news/ /news/some-article --- redirect ---> /en/news/some-article

我的尝试看起来像这样

正则expression式的问题,以消除JavaScript恶意软件

如何grep在Linux命令行中以双正斜杠开始的行?

如何重命名文件夹中的所有文件删除linux中的空格字符后的一切?

.htaccess重写规则改变下划线破折号

/ etc / passwd中的行的正则expression式validation

location ~* /news/.*$ { if ($request_uri !~* /(de|en)/$) { return 302 https://example.com/$lang/$request_uri; } }

到目前为止,这导致了无限的redirect。

Apacheconfiguration:正则expression式禁止访问以点开头的文件/目录

在bash文件中交换2个单词的最佳方式是什么?

批处理将reg查询命令的输出正则expression为一个variables

如何在Windows命令行中从类path中排除特定的jar文件

sedreplace一组文件的string

您的解决方案似乎对我来说过于复杂。 测试$request_uri跟踪$将永远不会匹配重写的URI(因此循环)。

您可以使用前缀location来匹配以/news/开头的URI。

假设你已经为其他地方的$lang计算了一个值,这可能适用于你:

location ^~ /news/ { return 302 /$lang$request_uri; }

只有在配置中有可能冲突的正则表达式location块时,才需要^~修饰符。 请参阅此文档了解更多

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐