包含空白 spce 的 Nginx 重写

use*_*262 5 rewrite nginx

我们的一位客户创建了一个二维码,其中 url 中包含一个空格。我将如何编写处理此问题的 nginx 重定向?

在字符串中使用诸如“%20”之类的东西的几次尝试似乎会导致 nginx 出错或使 configtest 失败

准确地说,二维码是这样读的

http://www.google.com/somestuff /someotherstuf/pagewewant

我需要将它重定向到

http://www.google.com/somestuff/someotherstuf/pagewewant (重写应该在 somestuff 之后不显示空格)

谢谢你的时间

小智 5

我遇到了完全相同的问题。不能使用 %20 的原因是,nginx 会解释 uri,因此 %20 将不匹配:

http request line: "GET /something/%20something HTTP/1.1"
http uri: "/something/ something"
Run Code Online (Sandbox Code Playgroud)

我不想为此使用位置,所以我使用了:

rewrite ^/something/\ something /something/something permanent;
Run Code Online (Sandbox Code Playgroud)

这对我来说效果很好。


maz*_*xuz 4

这个问题已经有两年多了,但也许它会帮别人省去一些麻烦。

警告:我不是 nginx 专家。这只是我在发现这个悬而未决的问题后尝试过的事情之一,而且它碰巧起作用了。这可能不是最好的方法。我建议您检查 nginx 文档,以防万一要处理大量此类位置。

对于偶尔重写(包括空格)的情况,我将路径放在单引号中:

location '/level_one /landingpage.htm' { 
rewrite ^ http://www.foo.bar/level_one/landingpage.htm permanent; }
Run Code Online (Sandbox Code Playgroud)

如果由于某种原因您需要在目标中包含空格,请将其放在单引号中:

location '/downloads/foo bar.pdf' { 
rewrite ^ 'http://www.foo.bar/documents/foo bar.pdf' permanent; }
Run Code Online (Sandbox Code Playgroud)