我们的客户创建了一个二维码,其中包含一个空白区域。 我如何编写处理此问题的nginx重定向?
在字符串中使用诸如“%20”之类的一些尝试似乎会导致nginx错误或者使configtest失败
准确地说,QR码读起来像这样
http://www.google.com/somestuff / someotherstuf / pagewewant
我需要重新指导
http://www.google.com/somestuff/someotherstuf/pagewewant (重写之后应该显示没有空格)
感谢您的时间
答案 0 :(得分:4)
问题已经超过两年了,但也许它会让某些人感到头疼。
警告语:我不是nginx专家。这只是我在找到这个未解答的问题后尝试的事情之一,它恰好起作用。这可能不是最好的方法。我建议检查nginx文档,以防一个人正在考虑处理大量此类位置。
对于偶尔重写包括空格我将路径放在单引号中:
location '/level_one /landingpage.htm' {
rewrite ^ http://www.foo.bar/level_one/landingpage.htm permanent; }
如果由于某种原因你需要在目标中有空格,那么也将它放在单引号中:
location '/downloads/foo bar.pdf' {
rewrite ^ 'http://www.foo.bar/documents/foo bar.pdf' permanent; }
答案 1 :(得分:2)
我遇到了完全相同的问题。 您不能使用%20的原因是,nginx将解释uri,因此%20将不匹配:
http request line: "GET /something/%20something HTTP/1.1"
http uri: "/something/ something"
我不想为此使用位置,所以我使用了:
rewrite ^/something/\ something /something/something permanent;
这对我来说很好。
答案 2 :(得分:1)
如果您想从网址中删除空格,然后重定向到没有空格的已剥离网址,只需使用以下内容来捕获所有包含此问题的网址:
rewrite ^(.*)(\s|%20)(.*)$ $1$3 permanent;
这基本上是在捕获组1(\s
)中第一次出现空格%20
或URL编码空间$1
之前抓取所有内容。然后在第2组($2
)中捕获这些空格。然后,最后在第3组中遗留的任何东西都会被捕获到第3组($3
)。然后,我将捕获组1和3连接在一起($1$3
)以形成重定向URL,而不包含捕获组2中的空格($2
)。
这将适用于URL中包含多个空格的URL,但它一次只能运行一个。因此,其中包含2个空格的URL将重定向到具有1个空格的URL,最后重定向到没有空格的URL。
如果您愿意,您当然可以从永久更改重定向类型。这将使用301代码重定向。