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

时间:2018-10-10 10:52:59

标签: nginx nginx-location static-files nginx-config

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

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

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

我已经在我的Nginx配置中尝试了以下位置规则

  location ~ ^/css/?(.*)$ {
        #return 200 $document_root/web/css/$1;
        # 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/$1 =404;
    }

通过#return 200 $document_root/web/css/$1;返回有效路径。

但是请求仍然失败。

我还尝试如下使用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,它也会返回另一个代码,因此到达了位置声明,但是try_files不起作用

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

1 个答案:

答案 0 :(得分:0)

如果可以通过将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结尾,而不是两者都结尾。有关详情,请参见this document