Having trouble understand how rewrite works

Here’s a small sample that is not working:

server {
# /index.cfm?PageID=1 → /
location ^~ /index.cfm?PageID=1$ {
rewrite ^ / permanent;
}

    location / {
            try_files $uri @django;
    }

    location @django {
            proxy_redirect      off;
            proxy_set_header    Host            $host;
            proxy_set_header    X-Real-IP       $remote_addr;
            proxy_set_header    X-Forwarded-For 

$proxy_add_x_forwarded_for;

            include uwsgi_params;
            if (!-f $request_filename) {
                uwsgi_pass staging;
                break;
            }
    }

}

It seems like the first directive is ignored when I request
/index.cfm?PageID=1. The idea is to redirect some old links.

Thanks


Victor Noagbodji
http://www.victorsreviews.com

19.10.2011, 22:53, “victor” [email protected]:

Here’s a small sample that is not working:

server {

/index.cfm?PageID=1 → /

  • location ^~ /index.cfm?PageID=1$ {
  • rewrite ^ / permanent;
  • location = /index.cfm {
  •             if ($arg_PageID = 1) {
    
  •                     return 301 /;
    
  •             }
    
  • try_files $uri @django;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

include uwsgi_params;

  •             # 'if' is useless here
    
  • if (!-f $request_filename) {

uwsgi_pass staging;

  • break;
  • }

http://www.victorsreviews.com


nginx mailing list
[email protected]
nginx Info Page


br, Denis F. Latypoff.

Hi Dennis,

Thanks for your help,

If I understand correctly, I need to use $arg_PARAMS. But in the full
source, I have expressions like this one:

/index.cfm?PageID=(2|46)&(.*)$

how do I deal with them in that case, if I can’t use regex on the
query parameters?

Thanks

2011/10/19 Denis F. Latypoff [email protected]:

  •     }
    

proxy_set_header X-Real-IP $remote_addr;

nginx mailing list
[email protected]
nginx Info Page


br, Denis F. Latypoff.


nginx mailing list
[email protected]
nginx Info Page


Victor Noagbodji
http://www.victorsreviews.com

19.10.2011, 23:32, “victor” [email protected]:

Hi Dennis,

Thanks for your help,

If I understand correctly, I need to use $arg_PARAMS. But in the full
source, I have expressions like this one:

/index.cfm?PageID=(2|46)&(.*)$

map $arg_PageID $is_old {
default 0;
2 1;
46 1;
}

server {
location = /index.cfm {
if ($is_old) {
return 301 /;
}
# regular rules
}
}

include uwsgi_params;


nginx mailing list
[email protected]
nginx Info Page


br, Denis F. Latypoff.

Sorry, index.cfm, of course, not index.php.

Andrejs

Posted at Nginx Forum:

Thanks again. I understand the map solution. Here’s another issue, you
see, the links below all map to the index page (there are other pages
too, that have those PageID, ParentPageID, etc… parameters).

/index.cfm?PageID=1
/index.cfm?resetCache=yes
/index.cfm?PageID=1&ParentPageID=1&NavID=1
/index.cfm?PageID=22&ParentPageID=1&NavID=22
/index.cfm?PageID=14&ParentPageID=38&NavID=38&ReferringPage=1

all map to / (index)

/index.cfm?PageID=35&ParentPageID=26&NavID=26
/index.cfm?PageID=35&ParentPageID=26&NavID=35&ProductID=8&PageText=off
/index.cfm?PageID=35&ParentPageID=26&NavID=35&ProductID=9&PageText=off
/index.cfm?PageID=35&ParentPageID=26&NavID=35&ProductID=10&PageText=off
/index.cfm?PageID=35&ParentPageID=26&NavID=35&ProductID=15&PageText=off
/index.cfm?PageID=35&ParentPageID=26&NavID=35&ProductID=16&PageText=off
/index.cfm?PageID=35&ParentPageID=26&NavID=35&ProductID=11&PageText=off

and these for example would map to another unique page.

The parameters specify the actual page that must be mapped to. And
since I now know I can’t use regex on query parameters, is there a way
to handle this situation?

Thanks

On Wed, Oct 19, 2011 at 12:40 PM, locojohn [email protected] wrote:


Victor Noagbodji
http://www.victorsreviews.com

Thanks,

Please see reply to Denis.

On Wed, Oct 19, 2011 at 12:40 PM, locojohn [email protected] wrote:


Victor Noagbodji
http://www.victorsreviews.com

Hi!

Arguments cannot be checked with location directive. Put the below code
into your main server {} block, for example, before declaring any of the
locations:

            if ($request_uri ~ ^/index\.php\?PageID=1$) {
              rewrite ^ /? permanent;
            }

Andrejs

Posted at Nginx Forum:

On 19 Out 2011 17h51 WEST, [email protected] wrote:

all map to / (index)
Taking the lead from Denis, try:

map $request_uri $is_old {
default 0;
~/index.cfm?PageId=\d+ 1;
~/index.cfm?PageID=\d+&ParentPageID=\d+&NavID=\d+ 1;
~/index.cfm?PageID=\d+&ParentPageID=\d+&NavID=\d+&ReferringPage=\d+
1;
}

/index.cfm?PageID=35&ParentPageID=26&NavID=26
/index.cfm?PageID=35&ParentPageID=26&NavID=35&ProductID=8&PageText=off
/index.cfm?PageID=35&ParentPageID=26&NavID=35&ProductID=9&PageText=off
/index.cfm?PageID=35&ParentPageID=26&NavID=35&ProductID=10&PageText=off
/index.cfm?PageID=35&ParentPageID=26&NavID=35&ProductID=15&PageText=off
/index.cfm?PageID=35&ParentPageID=26&NavID=35&ProductID=16&PageText=off
/index.cfm?PageID=35&ParentPageID=26&NavID=35&ProductID=11&PageText=off

map $request_uri $is_old_also {
default 0;
~/index.cfm?PageID=\d+&ParentPageID=\d+&NavID=\d+&ProductID=\d+&PageText=off
1;
}

Then you use the same type of if in location like exemplified by Denis
before. Just also a test for $is_old_also.

if ($is_old_also) {
return 301 ;
}

and these for example would map to another unique page.

The parameters specify the actual page that must be mapped to. And
since I now know I can’t use regex on query parameters, is there a
way to handle this situation?

See above. Try it.

— appa

Ah sorry, this one was meant for you Denis, not sure how gmail handled
it.


Thanks again. I understand the map solution. Here’s another issue, you
see, the links below all map to the index page (there are other pages
too, that have those PageID, ParentPageID, etc… parameters).

/index.cfm?PageID=1
/index.cfm?resetCache=yes
/index.cfm?PageID=1&ParentPageID=1&NavID=1
/index.cfm?PageID=22&ParentPageID=1&NavID=22
/index.cfm?PageID=14&ParentPageID=38&NavID=38&ReferringPage=1

all map to / (index)

/index.cfm?PageID=35&ParentPageID=26&NavID=26
/index.cfm?PageID=35&ParentPageID=26&NavID=35&ProductID=8&PageText=off
/index.cfm?PageID=35&ParentPageID=26&NavID=35&ProductID=9&PageText=off
/index.cfm?PageID=35&ParentPageID=26&NavID=35&ProductID=10&PageText=off
/index.cfm?PageID=35&ParentPageID=26&NavID=35&ProductID=15&PageText=off
/index.cfm?PageID=35&ParentPageID=26&NavID=35&ProductID=16&PageText=off
/index.cfm?PageID=35&ParentPageID=26&NavID=35&ProductID=11&PageText=off

and these for example would map to another unique page.

The parameters specify the actual page that must be mapped to. And
since I now know I can’t use regex on query parameters, is there a way
to handle this situation?

2011/10/19 Denis F. Latypoff [email protected]:

map $arg_PageID $is_old {

regular rules

  •     }
    

proxy_set_header X-Real-IP $remote_addr;

nginx mailing list
Victor Noagbodji


nginx mailing list
[email protected]
nginx Info Page


Victor Noagbodji
http://www.victorsreviews.com