加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

Nginx – 多个/嵌套的IF语句

发布时间:2020-12-13 21:05:00 所属栏目:Nginx 来源:网络整理
导读:我想做的事: 检查请求是否来自Facebook 检查URL是否与domain.com/2相似 如果上述条件为真 显示来自/ api / content / item / $1的内容?social = 1 如果上述条件为假 显示“正常页面” 这是一个单页面应用程序.在我的更改配置看起来像这样(并且它工作): lo

我想做的事:

>检查请求是否来自Facebook
>检查URL是否与domain.com/2相似
>如果上述条件为真 – 显示来自/ api / content / item / $1的内容?social = 1
>如果上述条件为假 – 显示“正常页面”

这是一个单页面应用程序.在我的更改配置看起来像这样(并且它工作):

location / {
    root /home/eshlox/projects/XXX/project/project/assets/dist;
    try_files $uri $uri/ /index.html =404;
}

我试过使用if语句:

location / {
    set $social 1;
    if ($http_user_agent ~* "facebookexternalhit") {
        set $social UA; 
    }       
    if ($uri ~* "^/(d+)$") {
        set $social "${social}URL";
    }       
    if ($social = UAURL) {
        rewrite ^/(d+)$/api/content/item/$1?social=1;
    }

    root /home/eshlox/projects/XXX/project/project/assets/dist;
    try_files $uri $uri/ /index.html =404;
}

使用此配置,只有在条件为真或假的情况下,一切都能正常工作.
如果其中一个条件为真且第二个条件为假(反之亦然),则nginx始终返回状态404.

我在nginx网站上找到了“IfIsEvil”,我试图使用映射(我可以在这种情况下使用映射吗?)但我仍然无法解决这个问题.

有任何想法吗?

最好的祝福.

最佳答案
nignx wiki中常见的陷阱有很多.

首先,我已将root指令移至服务器级别.其次,位置是检查网址的最佳方式.所以我重新考虑你的要求

>如果位置由数字组成
>并从Facebook请求

我们必须重写url,结果是:

root /home/eshlox/projects/XXX/project/project/assets/dist;

location / {
    try_files $uri $uri/ /index.html;
}

location ~ "^/d+$" {
    if ($http_user_agent ~* "facebookexternalhit") {
        rewrite (.+) /api/content/item$1?social=1;
    }

    try_files $uri $uri/ /index.html;
}

此外,在try_files指令中/index.html之后几乎没有理由使用= 404.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读