In Nginx, how to match and entire URL and Query String and redirect to a URL and Query String

我是研究僧i 提交于 2019-12-11 10:25:56

问题


I have been searching for a while now, trying work arounds and haven't come up with anything useful.

I have a (large) list of URL's from an site migration and need to match the entire URL + Query String and redirect to another URL.

As far as I can see the following only matches /mens, but not the rest of the query string.

rewrite "^/mens?brand%5B%5D=27&section%5B%5D=5&price-min=0&price-max=2000&sort=newest"  "/t/gender/men" permanent;

The reason it's important is that I have a bunch of similar URL's with slightly different Query Strings, which need to be redirected, similar to below, but actually work.... :-/

rewrite "^/mens/shop?q=road+map+polo"       "/t/category/golf-knits"    permanent;
rewrite "^/mens/shop?q=six+pocket+pant"     "/t/category/golf-pants"    permanent;

#etc... ad noiseam 

Thanks in advance, Paul.


回答1:


The $request_uri variable contains the entire URL. You could use a map to translate it into a redirection.

map $request_uri $target {
    ~*^/mens/shop\?q=road\+map\+polo   /t/category/golf-knits;
    ~*^/mens/shop\?q=six\+pocket\+pant /t/category/golf-pants;
}

server {
    ...
    if ($target) { return 301 $target; }
    ...
}

See this document for details.



来源:https://stackoverflow.com/questions/36083010/in-nginx-how-to-match-and-entire-url-and-query-string-and-redirect-to-a-url-and

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!