单页的nginx服务器位置

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

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

(和其他页面1,2)

我正在写configuration:

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

这个在线testing人员说,string匹配: http : //regexr.com?30bk3但实际上并没有。 WTF? nginx使用“特殊”的正则expression式还是什么? 如何使正确的expression?

使用代字号:

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

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

更新:

对不起,我读得太快了,专注于你的拼写错误,而不是查询string。

所以,诀窍是“位置”匹配的位置是/showthread.php。 你的查询string的其余部分是GET参数,不会在你试图模式匹配的东西。

看一下文档:

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

所以,你需要像这样的东西:

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

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

所以你的位置将需要一些简单的东西

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

如果你想要不同的nginx行为取决于参数的值,你可能必须使用参数的正则expression式在该位置使用一个if块来重写/redirect或做任何你需要的东西。

如果你控制showthread.php,最好在这里增加这个复杂性,而不是在你的nginxconfiguration中。

请参阅此链接了解更多信息。