【问题标题】:Convert Nginx rewrite from "if" to "try_files"将 Nginx 重写从“if”转换为“try_files”
【发布时间】:2013-11-29 11:11:21
【问题描述】:

我有以下 NGINX 重写规则,它非常适合安装在子文件夹中的 PHP 脚本:

location /subfolder/ {
  if (!-e $request_filename){
    rewrite ^/subfolder/(.*) /subfolder/index.php?do=/$1;
  }
}

但是 Nginx wiki 说使用“if”是邪恶的 http://wiki.nginx.org/IfIsEvil 所以我尝试了以下

location /subfolder/ {
    try_files $uri $uri/ /subfolder/index.php?$args;
}

但它不能替换上面的那个,尽管它适用于 WordPress 和大多数 PHP 脚本。如果有办法将其翻译为使用“try_files”?

谢谢!

【问题讨论】:

    标签: .htaccess nginx rewrite


    【解决方案1】:

    您只想在文件不存在时进行重写,将其用作try_files中回退的命名位置

    location /subfolder {
        try_files $uri $uri/ @rewrite;
    }
    
    location @rewrite {
        rewrite ^/subfolder/(.*) /subfolder/index.php?do=/$1;
    }
    

    【讨论】:

    • 这不起作用,Nginx 不会以以下错误消息开始:[emerg] unknown directive "$uri" in /etc/nginx/nginx.conf:2252
    • 它指的是以下行:$uri $uri/ @rewrite;
    • 添加 try_files 也没有帮助:try_files $uri $uri/ @rewrite;它会生成以下错误:/etc/nginx/nginx.conf:2254 中的未知指令“@rewrite”
    • 你有什么 nginx 版本?是的,我忘了写 try_files
    • 我的Nginx版本是1.0.10
    猜你喜欢
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多