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
,这样浏览器中的位置就会发生变化,但随后会在后端处理请求,就好像从来没有这样的重定向一样发生了。
我有以下 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
,这样浏览器中的位置就会发生变化,但随后会在后端处理请求,就好像从来没有这样的重定向一样发生了。