Redirect nginx将查询字符串$args重写为.html URL(不支持后端)

Redirect nginx将查询字符串$args重写为.html URL(不支持后端),redirect,nginx,url-rewriting,url-redirection,ngx-http-rewrite-module,Redirect,Nginx,Url Rewriting,Url Redirection,Ngx Http Rewrite Module,我有以下nginx重写规则 location /search { rewrite ^/search/([^/]*)\.html$ /search/?search=$1 break; try_files $uri $uri/ =404; } 我希望这是来自: http://test.com/search/?search=nginx 致: 非常感谢。您还没有指定哪个部件不工作。然而,在任何情况下,它看起来都是一个不完整的解决方案,因为您缺

我有以下nginx重写规则

location /search {
             rewrite ^/search/([^/]*)\.html$ /search/?search=$1 break;
            try_files $uri $uri/ =404;
    }
我希望这是来自:

http://test.com/search/?search=nginx
致:


非常感谢。

您还没有指定哪个部件不工作。然而,在任何情况下,它看起来都是一个不完整的解决方案,因为您缺少一个完整的循环

看一看和-这个想法是创建一个重定向循环,但是由于外部重定向和内部重定向的不同而中断它

尝试此操作,完整配置位于:

location=/search/{
如果($arg_search){
返回302/search/$arg_search.html;
}
返回200
“搜索
\n”;
}
位置/搜索/{
重写^/search/([^/]*)\.html$/search/?search=$1 break;
代理通行证http://localhost:7381;
}

上面的代码将自动从外部重定向到
/search/?search=nginx
,这样浏览器中的位置将发生变化,但随后将使用后端处理请求,就像从未发生过这样的重定向一样。

感谢您提供的赏金,希望我的回答对您有用。顺便说一句,如果你真的喜欢,并且想要更多的曝光,请确保不要在宽限期开始之前立即奖励奖金,否则,问题将从奖金页面上消失。请注意,在不授予奖金的情况下接受回答是确保曝光和保证奖金不会丢失的好方法,因为问题将继续显示在奖金列表上,直到宽限期开始。(通常,对奖金的多数投票是在最后几个小时内进行的。)谢谢,+1!呵呵,就在几周前,一个关于服务器故障的几乎相同的问题出现了!非常感谢,这非常有效,if函数是缺少的部分。@dsaint,酷,谢谢!那么,你也能接受这个答案吗?顺便说一句,对于未来,你可能希望接受而不是奖励,因为现在这个QA不再是赏金名单上的特色,所以,我们将不会得到更多的投票-(
http://test.com/search/nginx.html
location = /search/ {
    if ($arg_search) {
        return  302 /search/$arg_search.html;
    }
    return  200
    "<!DOCTYPE html><title>search</title>
    <form><input name='search'/></form>\n";
}
location /search/ {
    rewrite     ^/search/([^/]*)\.html$     /search/?search=$1  break;
    proxy_pass  http://localhost:7381;
}