2012-09-24 3 views
0

http://mysite.com/?action=add&goback=1과 같은 URL을 http://myiste.com/add/?goback=1으로 리디렉션하고 싶습니다. nginx 리디렉션 리디렉션 규칙이 제대로 작동하지 않습니다.

내가 온 :

location/{ 
    if ($request_uri ~* /\?action.*) { 
     add_header Cache-Control private; 
     rewrite ^/\?action=([^&]*)&?(.*)$ /$1/?$2 permanent; 
    } 
} 

그러나 그것은 작동하지 않습니다 내가 왜 표시되지 않습니다.

P. 나는 if ($request_uri ~* /\?action.*) {을 나타 내기 위해서 add_header이 필요했습니다.

rewrite ^/\?action=(\w+).*$ /$1/?$query_string permanent; 

과 같은 여러 가지 솔루션을 시도했습니다.

UPDATE :

실제 목표는 :

URL이

http://mysite.com/add/?param1=param1&... 

/(추가) /이되어야 액션 PARAM처럼 보이는 경우 :

location ~ /[\-\w]+/ { 
    rewrite ^/([^/]*).*$ /?action=$1 last; 
    ... 
} 

제대로 작동하고있는 것 같아 필요하지 않습니다. 이 하나

엑스트라 도움 URL은 다음과 같습니다 경우 : 내가 '나는 돈 결과를 얻고있어이 부분을 수행하려고 할 때

http://mysite.com/add/?param1=param1&... 

:

http://mysite.com/?action=add&param1=param1&... 

의 nginx는 리디렉션해야 필요 - 무한 리디렉션 루프, URL은 http://mysite.com/add/?action=add&param1=param1&... 등입니다.

내 목표를 해결하는 솔루션이 있습니까?

답변

1

왜냐하면 rewrite은 단지 location과 같이 따옴표가있는 쿼리가없는 URI 경로와 일치하기 때문입니다. 대신이 같은 것을보십시오 :

location =/{ 
    if ($arg_action) { 
     rewrite^/$arg_action/ permanent; 
    } 
} 

location = / 검사가 action=... 인수하고, rewrite^/$arg_action/ permanent; 실제로 URI를 다시 작성하는 리디렉션을 할 것입니다 확실 규칙은, /에 요청 if ($arg_action) 검사를 적용 할 것입니다. 쿼리 문자열은 원래 요청에서 보존됩니다 (기본적으로).

docs의 경우 http://nginx.org/r/rewrite을 참조하십시오.

+0

나는 내가 실제로 필요로하는 것이 무엇인지 명확히하고 있다고 생각한다 (질문은 업데이트 될 것이다). 대답은 도움이되지만'/ add /? action = add'로 리디렉션됩니다. – Nemoden

+0

+1했으나 죄송합니다. 수락 할 수 없습니다. – Nemoden

+0

'action = add'를 제거하는 것은 재 작성 교체 문자열에'action = add'가없는 쿼리 문자열을 추가하고 기본 쿼리 문자열 append를 피하기 위해 다른'? '를 추가하는 것만 큼 간단합니다. '다시 쓰기 ^/$ arg_action /? $ newquery? 영원한; '트릭을 할 것입니다. '$ newquery' 변수를 만드는 방법은 독자에게 연습으로 남겨 둡니다 (힌트 :'map $ args $ newquery {~^action = add \ & (? .+) $ foo; }'는 좋은 출발점이 될 수 있지만 일반적으로'action ='인수가 먼저 나올 것이라는 보장이 없기 때문에 가능한 모든 경우를 다루지는 않습니다. –

관련 문제