linux - NGINX - 忽略 js 和 css 文件上的获取参数
问题描述
目前,我正在尝试镜像 WordPress 网站,但 nginx 遇到了一些问题。文件(特别是 js 和 css)在文件末尾使用 ?ver=key 保存,因此当 nginx 尝试为它们提供服务时,它会出现 404 错误。
这是一个示例文件:
wp-embed.min.js?ver=cce7ff2a6851b83ee00fd3873407f90c
如何让 nginx 提供此文件而不给出 404 错误?我不想重命名所有这些文件,因为它们有数千个。这是我的 nginx 配置:
server {
server_name [redacted];
root /home/[redacted];
index index.html index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/[redacted]/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/[redacted]/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = [redacted]) {
return 301 https://$host$request_uri;
} # managed by Certbot
server_name [redacted]
listen 80;
listen [::]:80;
return 404; # managed by Certbot
}
解决方案
使用try_files
,您可以添加另一个术语,例如$uri?$args
它将查找包含文字?
后跟查询字符串的文件名。
一个问题是 Nginx 对文件扩展名感到困惑,无法确定正确的 Content-Type。您可以通过为每种文件类型创建特定位置来纠正此问题。
例如:
location / {
try_files $uri $uri/ =404;
}
location ~ \.css$ {
types {}
default_type text/css;
try_files $uri $uri?$args =404;
}
location ~ \.js$ {
types {}
default_type application/javascript;
try_files $uri $uri?$args =404;
}
location ~ \.php$ {
...
}
推荐阅读
- java - Java中的信号量列表和并发
- python - 抓取:如何使用无头硒不被检测到
- amazon-web-services - AWS CloudFormation:无法创建 ElasticCache
- google-apps-script - 使用 Apps 脚本将过滤后的 HTML Web 应用表数据发送回 Google 表格
- python - 为这个问题在 python 中编写更好的代码
- python - Boosting算法在Python中的实现
- python - Python 3.7 smtplib sendmail 仅发送给列表中的第一个收件人
- r - 在 R 中下载数据集闪亮
- matplotlib - Plotly mpl_to_plotly 错误:“Spine”对象没有属性“is_frame_like”
- javascript - 使用 Google 可视化工具和 Javascript 从响应中设置数组