我只想为单个页面设置一个位置:
/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中。
请参阅此链接了解更多信息。