单页的 nginx 服务器位置

单页的 nginx 服务器位置

我只想为单个页面设置一个位置:

/showthread.php?t=2589&page=3

(以及其他第 1、2 页)

我在配置中写道:

location ~* ^.+showthread\.php\?t=2589.+$ {

该在线测试人员表示该字符串匹配:http://regexr.com?30bk3 但实际上并非如此。WTF?nginx 是否使用了“特殊”正则表达式?如何做出正确的表达?

答案1

使用波浪符号:

location ~ ^.+showthread.php\?t=2589.+$

来表示一个正则表达式,否则 nginx 会将其视为文字。

更新:

抱歉,我读得太快了,关注的是你的拼写错误而不是查询字符串。

因此,诀窍在于“location”与位置(即 /showthread.php)匹配。查询字符串的其余部分是 GET 参数,不会出现在您尝试进行模式匹配的内容中。

看一下文档:

http://wiki.nginx.org/HttpCoreModule#.24args

因此,你需要类似这样的东西:

location /showthread.php {
  if ($arg_t = '2589') {
     # do some stuff
  }
}

答案2

Nginx 位置仅匹配 URI 词干,而不匹配传入的参数(问号后面的内容)。

因此,您的位置需要简单一些,例如

  location /showthread.php {/*some stuff*/}

如果你希望根据参数的值实现不同的 nginx 行为,则可能需要使用 if 块里面该位置使用参数上的正则表达式来重写/重定向或执行您需要的任何其他操作。

如果您控制 showthread.php,最好在那里而不是在 nginx 配置中添加这种复杂性。

此链接了解更多信息。

相关内容