目前我正在使用以下配置文件尝试将所有网址从example.com/page.html更改为example.com/page.html。由于SEO的原因,不再可以访问Page.html,它应该是一个非常简单的重定向。搜索后,我找到了以下代码:
server {
listen myip8:8080;
root /mydir;
index index.html index.htm;
server_name example.com;
# 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;
}
但是,我遇到了问题。找不到我的所有静态资产。 CSS,JS等只是给出了404错误。
该代码中的内容可能导致404?
此外,值得注意的是我的服务器设置。我有两个单独的VPS。清漆和Nginx。 Varnish服务器代理对Nginx的请求。我不确定这与此有什么关系。 最后,我找到代码的原始主题就是这个:redirect /foo.html to /foo but not / to /index in nginx 它似乎适用于那里的OP,但我不能让它工作。
答案 0 :(得分:2)
是的,这是非常符合逻辑的,因为您永远不会尝试自己访问$uri
,因此服务器会尝试example.com/images/image.png.html
。
由于您已经处理了上述html
案例,因此您应首先添加$uri
。
try_files $uri $uri.html $uri/index.html @backend;