nginx - 如何在子文件夹上提供索引文件?

时间:2016-06-09 18:18:11

标签: nginx

我正在尝试使用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指令?

1 个答案:

答案 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放在浏览器的地址栏中,但至少它可以正常工作。