Nginx 重定向站点索引请求

Nginx 重定向站点索引请求

现有功能: try_files以及rewrite用于允许请求foo.htmlfoo/重定向到foo

问题:如果我指定try_files $uri.html $uri @noextension =404;,则请求domain.com/重定向到 404 页面,但请求domain.com/index作品。

问题2:如果try_files $uri.html $uri @noextension /index.html改用,则将返回站点根目录,但对不存在的页面的请求也将重定向到站点根目录,而不是 404 错误。

问题3:以下操作也会导致 / 请求失败但 /index 请求正常:

location / {
    try_files $uri @noextension;
}

# redirect /foo/ to /foo
rewrite ^(/.+)/$ $1 permanent;
# redirect /foo.html to /foo
rewrite ^(/.+)\.html$ $1 permanent;

location ~ \.html$ {
    try_files $uri =404;
}

所有其他网站页面都正常,只有对网站根目录的请求受到影响。我该如何让索引页和 404 页正确响应?

server {
    listen       80;
    server_name  localhost;

    root   /usr/share/nginx/html;
    index  index.html;

    location / {
        try_files $uri.html $uri @noextension =404;
    }

    # redirect /foo/ to /foo
    rewrite ^(/.+)/$ $1 permanent;
    # redirect /foo.html to /foo
    rewrite ^(/.+)\.html$ $1 permanent;

    location @noextension {
        # allow for domain.com rather then domain.com/index to respond
        rewrite ^(.*)$ $1.html last;
    }

    error_page  404              /404;

相关内容