gpt4 book ai didi

在 nginx 中将/foo.html重定向到/foo但不是/to/index

转载 作者:行者123 更新时间:2023-12-02 09:12:14 25 4
gpt4 key购买 nike

我在磁盘上的文件具有扩展名:index.htmla.html。我想要请求 http://example.com/a 加载 /var/www/a.htmlhttp://example.com/ 加载/var/www/index.html。我希望任何其他网址重定向到规范网址,因此 http://example.com/a.html 应重定向到 http://example.com/a .

我的配置如下:

rewrite ^(/.+)\.html$ $scheme://$host$1 permanent;
location / {
root /var/www;
try_files $uri.html $uri $uri/ =404;
}

这确实将 /a.html 重定向到 /a 并成功从磁盘加载 a.html:

$ curl -D- -s http://www.jefftk.com/food.html | grep ^Location
Location: http://www.jefftk.com/food
$ curl -s http://www.jefftk.com/food | grep ^Location

但它会将 / 发送到 /index:

$ curl -s -D- http://www.jefftk.com/pictures/ | grep ^Location
Location: http://www.jefftk.com/pictures/index
$ curl -s -D- http://www.jefftk.com | grep ^Location
Location: http://www.jefftk.com/index

如果我删除重写规则,它会停止从 /a.html 重定向到 /a,但也会停止发送 //索引:

$ curl -D- -s http://www.jefftk.com/food.html | grep ^Location
$ curl -D- -s http://www.jefftk.com/food | grep ^Location
$ curl -D- -s http://www.jefftk.com/ | grep ^Location
$ curl -D- -s http://www.jefftk.com/pictures/ | grep ^Location

为什么会发生这种情况?我可以同时让 nginx 处理我想要的两件事(没有 .html 扩展名,没有 index 网址)吗?

最佳答案

我认为你的重写规则可能是倒退的。也许只是这样(没有重写规则):

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

location = / {
index index.html;
}

编辑版本:

抱歉,我没有完全理解您的描述。我重读了几次并对此进行了测试,它可能接近您想要做的事情:

location = / {
try_files /index.html =404;
}

location = /index {
return 301 $scheme://$host;
}

location ~* \.html$ {
rewrite ^(.+)\.html$ $scheme://$host$1 permanent;
}

location / {
try_files $uri.html $uri/ @backend;
}

location @backend {
# rewrite or do whatever is default for your setup
rewrite ^ /index.html last;
// or return 404;
}

代码示例(修订版 3):

我希望第三次是一个魅力。也许这能解决您的问题?

# example.com/index gets redirected to example.com/

location ~* ^(.*)/index$ {
return 301 $scheme://$host$1/;
}

# example.com/foo/ loads example.com/foo/index.html

location ~* ^(.*)/$ {
try_files $1/index.html @backend;
}

# example.com/a.html gets redirected to example.com/a

location ~* \.html$ {
rewrite ^(.+)\.html$ $scheme://$host$1 permanent;
}

# anything else not processed by the above rules:
# * example.com/a will load example.com/a.html
# * or if that fails, example.com/a/index.html

location / {
try_files $uri.html $uri/index.html @backend;
}

# default handler
# * return error or redirect to base index.html page, etc.

location @backend {
return 404;
}

关于在 nginx 中将/foo.html重定向到/foo但不是/to/index,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13961825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com