1

i'm trying to make a redirects from URL's with option ID to URL's with option URL_key i've assigned.

I have two column table with ID i'd like to substitute and URL_key as substitute.

11337 bar 11419 restaurant 11399 cafe 15477 painting

I have these URL's coming right now:

ifab.ru/art/kartiny/location/11399/style/15477

that i would like redirect to:

ifab.ru/art/kartiny/location/cafe/style/painting

You may say i could just take all the urls from website and substitute with replace, but they are being generated automatically and each combination may be different from each other, so i would like to catch the ID and rewrite it to URL_key.

Any thoughts and solutions are appreciated.

We run our server on nginx, no apache.

2
  • nginx.org/r/map Dec 25, 2014 at 16:13
  • @MichaelHampton thanks for this reference. As far as i know, map is not flexible enough to change part of url. it suits to rewrite full urls. Could you please give an example of how can i use it for my case?
    – Damir
    Dec 25, 2014 at 16:19

1 Answer 1

2

This should work:

map $loc $loc_text {
    11337 bar;
    11419 restaurant;
}

map $style $style_text {
    15477 painting;
}

rewrite ^/art/kartiny/location/(?P<loc>\d+)/style/(?P<style>\d+)$ 
    /art/kartiny/location/$loc_text/style/$style_text
    redirect;

See also http://nginx.org/en/docs/http/server_names.html#regex_names

2
  • Hi, @Tobia, thank you for this solution, it seems like a working one, but i can include /art/kartiny here, it's other part of URL which i wouldn't like to monitor. I need to change only something like <br/> ^/location/(?P<loc>\d+)/style/(?P<style>\d+)$ /location/$loc_text/style/$style_text <br/> Is it possible? It would be awesome if it was possible to leave only something like <br/> ^/(?P<loc>\d+)/ /$loc_text/
    – Damir
    Dec 26, 2014 at 7:32
  • You mean like this: rewrite ^/(.*)/location/(?P<loc>\d+)/style/(?P<style>\d+)$ /$1/location/$loc_text/style/$style_text ?
    – Tobia
    Dec 26, 2014 at 16:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.