Nginx try_files 不工作 404,无法加载文件

Nginx try_files doesn't work 404, cannot load files

我已经处理了大约几个小时的问题,但没有任何成功。 我无法从我的项目中服务器静态文件的问题。

以前我对 Apache 服务器有以下规则。

RewriteRule ^assets/(.*)$ /web/assets/ [L]
RewriteRule ^css/(.*)$ web/css/ [L]
RewriteRule ^js/(.*)$ web/js/ [L]
RewriteRule ^images/(.*)$ web/images/ [L]

我在我的 nginx 配置中尝试了以下位置规则

  location ~ ^/css/?(.*)$ {
        #return 200 $document_root/web/css/;
        # kill cache
        add_header Last-Modified $date_gmt;
        add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
        if_modified_since off;
        expires off;
        etag off;
       #try_files $uri $uri/ /index.php =404;
       try_files $document_root/web/css/ =404;
    }

顺便说一句 #return 200 $document_root/web/css/; return 是有效路径。

但是请求还是失败了

我也尝试使用 alias 如下

  location ~ ^/css/?(.*)$ {
        alias /var/wwww/myproject/web/css;
        # kill cache
        add_header Last-Modified $date_gmt;
        add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
        if_modified_since off;
        expires off;
        etag off;
        try_files $uri $uri/ /index.php =404;
    }

同样的情况404,如果我在上面的位置更改404它也会return另一个代码,因此到达位置语句但try_files不起作用

请帮助解决问题,我不知道该尝试什么。 谢谢

如果您的文件路径可以通过将 root 的值与当前 URI 连接起来构建,您应该使用 root 而不是 alias。有关详细信息,请参阅 this document

假设 /css/foo.css 物理上位于 /var/www/myproject/web/css/foo.css,下面的例子应该足够了。

location /css/ {
    root /var/www/myproject/web;
    ...
    try_files $uri $uri/ /index.php;
}

您不需要使用正则表达式location,也不需要捕获部分 URI。

try_files 语句需要以 =404/index.php 结尾,不能同时以 =404/index.php 结尾。有关详细信息,请参阅 this document