我正在尝试使用nginx托管一个jekyll静态网站。我想要从网址中的子目录提供的网站,例如https://example.com/jekyll-site/
。源文件位于git仓库中,克隆到服务器上的/srv/website/html
文件夹中。当我运行jekyll build
时,它会在/srv/website/html/_site
中创建网站的文件。 index.html
中有一个_site
文件,我想用于索引指令。
这是我到目前为止的配置:
server {
# ...
location / {
# proxy_pass'es to another process
}
location = /jekyll-site {
return 302 https://$host$request_uri/;
}
location /jekyll-site/ {
root /srv/website/html/_site;
index index.html;
rewrite_log on;
rewrite /jekyll-site/(.*) /$1 break;
try_files $uri /index.html;
}
}
现在,如果我将浏览器指向https://example.com/jekyll-site/index.html
,那么它会正确地提供索引文件。如果我去网站上的任何帖子,它会得到正确的服务。从一个帖子到另一个帖子的所有内部链接都能正常工作。但是,如果我转到https://example.com/jekyll-site/
,我会得到一个404
页面,而不是索引页面。
我的配置有什么问题?如何配置nginx来提供该文件夹中的文件,同时使用正确的index
指令?
答案 0 :(得分:0)
我能够通过添加带有重定向的附加位置块来实现它,如下所示:
server {
# ...
location / {
# proxy_pass'es to another process
}
location = /jekyll-site {
return 302 https://$host$request_uri/;
}
location = /jekyll-site/ {
return 302 https://$host${request_uri}index.html;
}
location /jekyll-site/ {
root /srv/website/html/_site;
index index.html;
rewrite ^/jekyll-site/(.*)$ /$1 break;
}
}
它将https://example.com/jekyll-site/index.html
放在浏览器的地址栏中,但至少它可以正常工作。