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。
我已经处理了大约几个小时的问题,但没有任何成功。 我无法从我的项目中服务器静态文件的问题。
以前我对 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。