1

我正在尝试做

http://site.com/index.php?route=product/search&filter_name=QUERY

http://site.com/search?=QUERY

这是我的规则;这没用。

rewrite ^/search?q=(.*)?$ /index.php?route=product/search&filter_name=$1 last;
4

2 回答 2

3

Nginx 不允许你匹配查询字符串,而是它有一个$args变量和if -s。您可以将其结合起来,使示例像这样工作:

(使用 nginx if else 语句更新)

location /search {
    if ($args ~ "q=(?<q>.*)?") {
        rewrite ^ /index.php?route=product/search&filter_name=$q last;
    }
    # Else (if no search query entered from form)
    rewrite ^ /index.php?route=product/search last;
}

但是因为如果 -s在 nginx 配置中被认为是邪恶的,你应该使用(在你的情况下)try_files

location /search
    try_files $uri /index.php?route=product/search&filter_name=$arg_q;
}
于 2012-07-23T14:00:21.963 回答
0

问题是$标志。在这种情况下需要事先。解决方案:

rewrite ^/search?q=$(.*)$ /search.php?q=$1? last;
于 2012-07-23T13:53:07.810 回答