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

nginx rewrite query string $args to .html URL (w/o backend support)

我有以下 nginx 重写规则。

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

我希望它像来自:

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

至:

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

非常感谢。

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

看看 nginx redirect loop, remove index.php from url and https://serverfault.com/a/568902/110020 — 这个想法是创建一个重定向循环,但由于外部与内部重定向的不同而打破它。

试试这个,完整配置在 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=  break;
    proxy_pass  http://localhost:7381;
}

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