对于即将上线的网站,我们通常会index.html
在 Web 根目录中放置一个静态文件。该文件内嵌包含所有样式和图像,因此无需其他请求即可加载该页面。
现在,我使用这个配置:
# Temporary placeholder
server {
server_name .domain.com;
root /var/www/domain/production/public;
index index.html;
charset UTF-8;
}
# Production
server {
server_name test.domain.com;
root /var/www/domain/production/public;
charset UTF-8;
gzip_types text/plain application/xml text/css text/js image/svg+xml text/xml application/x-javascript text/javascript application/json application/xml+rss;
location /assets/images {
default_type image/jpeg;
expires max;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
location /styles/fonts {
expires max;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
include conf.d/common.conf.inc;
}
这“足够”有效,但由于仅设置了“index”指令,人们能够请求不应提供的资源(例如 domain.com/foo/bar/file.ext)。
问题:我如何指向全部请求到index.html
第一个服务器块?我尝试使用位置,try_files
但 nginx 无法处理该列表中的单个项目:
location / {
try_files index.html;
}
我怎样才能实现这个目标?(我知道您可以使用重定向,但目前我不喜欢这种解决方案。domain.com/foo/bar/baz 应该只是提供服务index.html
)。
答案1
我认为你需要这个:
location = /index.html {
root /var/www/domain/production/public;
}
location / {
rewrite . /index.html last;
}
看Nginx 的 location 文档看看这是什么意思。