为什么重写在 nginx 中不起作用

为什么重写在 nginx 中不起作用

我有以下服务器配置:

server {
    listen       7777;
    server_name  localhost;

    rewrite ^/standardlib/(.*)$ /standardlib/src/main/webapp/$1 last;

    location / {
        root   D:\Projects\gibr;
        index  index.html index.htm;
    }

    location /api {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass http://172.22.90.61:8008;
    }
}

我有以下资源链接:

http://localhost:7777/standardlib/resources/css/standardlib.css

但文件实际上在里面:

/standardlib/src/main/webapp/resources/css/standardlib.css

因此我尝试重写 URL:

rewrite ^/standardlib/(.*)$ /standardlib/src/main/webapp/$1 last;

但出于某种原因,它不起作用。我添加了日志记录:

error_log  logs/error.log  notice;
rewrite_log     on;

但是错误日志中没有有关重写的信息。

我已经检查过正则表达式regex101,并且似乎捕获了正确的组。

我究竟做错了什么?

更新

它实际上正在工作,我已经添加了log_not_found on;,但由于某种原因,它尝试查找以下文件:

`D:\webservers\nginx/html\standardlib\src\main\webapp\bootstrap.js`

代替

`D:\projects\gibr\standardlib\src\main\webapp\bootstrap.js`

以下是我在日志中得到的内容:

15128#7720: *1 "^/standardlib/(.*)$" matches "/standardlib/bootstrap.js"
15128#7720: *1 rewritten data: "\standardlib\src\main\webapp\bootstrap.js"
15128#7720: *1 CreateFile() "D:\webservers\nginx/html\standardlib\src\main\webapp\bootstrap.js" failed (3: The system cannot find the path specified)

答案1

这是因为您将带有反斜杠的 Windows 根路径与 Unix 样式的正斜杠混合在一起。

请参阅此处的评论:如何在 nginx 中指定 Windows 文件路径

我不是 Windows 系统管理员,但似乎您需要使用相对路径(如 ../)才能使您的路径完整且正常工作。

另请参阅:https://www.ruby-forum.com/topic/172663

相关内容