我正在尝试
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;
答案 0 :(得分: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;
}
但是自从nginx配置if -s are considered evil以来,你应该使用(在你的情况下)try_files:
location /search
try_files $uri /index.php?route=product/search&filter_name=$arg_q;
}
答案 1 :(得分:0)
问题是$
标志。它需要事先在这种情况下。解决方案:
rewrite ^/search?q=$(.*)$ /search.php?q=$1? last;