-1

我有以下 nginx 重写规则。

location /search {
             rewrite ^/search/([^/]*)\.html$ /search/?search=$1 break;
            try_files $uri $uri/ =404;
    }

我希望这就像:

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

至:

http://test.com/search/nginx.html

非常感谢您。

4

1 回答 1

0

您尚未指定哪个部分不起作用。但是,无论如何,它看起来都是一个不完整的解决方案,因为您缺少一个完整的循环循环。

看一下nginx 重定向循环,从 url和https://serverfault.com/a/568902/110020中删除 index.php — 这个想法是创建一个重定向循环,但由于外部和内部重定向的差异而中断它.

试试这个,完整的配置在https://gist.github.com/cnst/3521404dfdf5cb7b4c526b5c6dff38ff

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;
}

上面的代码会自动重定向/search/?search=nginx/search/nginx.html外部,这样浏览器中的位置会改变,但是会在后端处理请求,就好像从来没有发生过这样的重定向一样。

于 2017-07-25T03:11:43.553 回答