现有功能: try_files
以及rewrite
用于允许请求foo.html
并foo/
重定向到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;