nginx.conf 重写没有被触发

nginx.conf rewrite not getting triggered

http{
    server {
        listen 80;
        server_name example.com;
        rewrite_log on;
        root /etc/nginx/html/mysite;
        location ^~ /me/ {
           rewrite ^/me/(.*)$ /etc/nginx/html/mysite/.html;
        }
    }
}

当我发出请求时,上面的方法不起作用http://example.com/me/all

我希望它由 /etc/nginx/html/mysite/all.html

提供

但是请求转到 /etc/nginx/html/mysite/me/all 忽略了重写并且没有关于日志中的重写错误(只是 404 未找到)。

您正在将虚拟主机的 root 指定为 /etc/nginx/html/mysite(第 6 行)。在您的重写规则中,您再次指定整个路径 /etc/nginx/html/mysite/.html(第 8 行)。 nginx 所做的是将重写规则的目标 (/etc/nginx/html/mysite/.html) 附加到虚拟主机的根目录 (/etc/nginx/html/mysite)。在您的示例中,这会导致搜索文件:

/etc/nginx/html/mysite/etc/nginx/html/mysite/all.html

这样的文件不存在导致404。 更正规则,使目标成为相对于 root 的相对路径,如:

http{
    server {
        listen 80;
        server_name example.com;
        rewrite_log on;
        root /etc/nginx/html/mysite;
        location ^~ /me/ {
           rewrite ^/me/(.*)$ /.html;
        }
    }
}

请记住,您可以通过阅读 nginx 错误日志(默认位于 /var/log/nginx/error.log)获得有关这些错误的更多信息。在你的情况下,它会这样说:

"/usr/share/nginx/html/mysite/usr/share/nginx/html/mysite/all.html" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /me/all HTTP/1.1", host: "localhost"