【问题标题】:nginx fallback if rewrite fails如果重写失败,nginx 回退
【发布时间】:2014-06-07 06:02:56
【问题描述】:

我的文件夹结构:

/var/www/puenktchenunda/public/img/subjects

/var/www/puenktchenunda/public/img/subjects_min

subjects 包含那些“原始”文件。 Subjects_min 包含将定期创建的压缩图像。 URL 调用将转到主题:

/img/subjects/img1.png

应该发生什么:

  1. 重写为subjects_min
  2. 如果 /img/subjects_min/img1.png 确实存在,则提供它
  3. 如果 /img/subjects_min/img1.png 不存在,则从 /img/subjects/img1.png 提供图像

第 1 步和第 2 步运行良好。这适用于这个位置块:

location ~* ^.*\/img\/sujets\/.*.(jpg|png|jpeg|gif) {

    root /var/www/puenktchenunda/public;
    rewrite /img/sujets/(.*)$ /img/sujets_min/$1;
    #try_files /img/sujets_min/$URI /img/sujet/$URI;

}

但我不确定如何完成其​​余的工作。有什么想法吗?

更新

这是我目前的版本。这工作正常,除了 sujets_big 位置块。最后 1 美元有一些问题。整个块表达式添加在 $1 之后,而不仅仅是括号中的表达式。

location ~ /img/sujets/(.*.png)$ {
    root /var/www/puenktchenunda/public/;
    try_files /img/sujets_min/$1 /img/sujets_big/$1;
}


location ~ /img/sujets_big/(.*.png)$ {
    root /var/www/puenktchenunda/public/img/sujets/$1;
}

【问题讨论】:

    标签: nginx url-rewriting


    【解决方案1】:

    试试这个逻辑

    location ~* ^/img/subjects/([\w\-]+\.(?:jpe?g|png|gif))$ {
    
        root /var/www/puenktchenunda/public;
    
        set $imgfilename /img/subjects_min/$1;
    
        if (-f $document_root$imgfilename) {
    
            rewrite . $imgfilename break;
    
        }
    
    }
    

    【讨论】:

    • 嗯,它说“nginx:[emerg]未知的“根”变量”
    • 当我用完整路径替换 $root 时,它会出现附加太多的问题,包括。位置中的整个表达式。
    • @rapsli 尝试使用变量而不是 $1。使用$document_root编辑。
    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 2011-05-29
    • 2017-04-24
    • 1970-01-01
    • 2016-04-23
    • 2019-11-02
    • 2017-05-16
    • 2019-04-25
    相关资源
    最近更新 更多