Nginx Rewrite 쿼리 문자열을 경로로 변환


11

이 간단한 재 작성 규칙을 좋아했습니다.

/somefolder/mypage.aspx?myid=4343&tab=overview

다음으로 리디렉션됩니다.

/folder/4343/overview/

나는 몇 가지 해결책을 찾았지만 실제로 효과가 없었습니다.

나는 시도했다 :

rewrite ^/somefolder/mypage.aspx?myid=(.*)&tab=overview$  /folder/$1/overview  permanent;

rewrite ^/somefolder/mypage\.aspx\?myid=(.*)&tab=overview$  /folder/$1/overview  permanent;

내가 뭘 잘못하고 있죠? 404를 받고 있습니다

(더 간단한 규칙은 잘 작동합니다 ..)

감사

답변:


12

리디렉션을 원하는 경우

location ~ /somefolder/mypage.aspx {
    if ($args ~* "^myid=(\d+)&tab=overview") {
        set $mid $1;
        set $args '';
        rewrite ^.*$ /folder/$mid/overview permanent;
    }
}

/ folder / $ 1 / viewview 위치를 구성하는 것을 잊지 마십시오.


감사합니다. 리디렉션이 작동하지만 매개 변수가없는 경우 ($ 1) ... 비어 있음
YardenST

답변을 업데이트했습니다.
Valery Viktorovsky

32

Valery Viktorovsky 답변의 더 짧고 정확한 버전입니다.

location = /somefolder/mypage.aspx {
    if ($arg_tab != overview) { return 404; }
    if ($arg_myid !~ "^\d+$") { return 404; }
    rewrite ^ /folder/$arg_myid/overview? permanent;
}

또는 인수를 확인할 필요가 없으면 더 짧을 수도 있습니다.

rewrite ^/somefolder/mypage.aspx /folder/$arg_myid/$arg_tab? permanent;

이전에 게시했으면 좋겠다 :) 시간을 절약했을 것입니다.
YardenST

lol. 그런 규칙이 많습니까? 글쎄, 결코 늦지 않는 것보다 낫다! 또한 수락하면 되나요? :)
cnst

Valery 솔루션은
결론적으로

9
meta.stackexchange.com/questions/5234/… « 당신을 위해 일하는 것 외에도 그 답이 실제로 좋은 습관인지 확인하십시오. 때로는 대답이 받아 들여지면 다른 사람이 들어 와서 이전의 사람이 실제로 나쁜 해킹이라는 사실을 밝혀냅니다. »정말로 Valery의 답변에는 단 하나의 문제가 아니라 몇 가지 다른 문제가 있습니다! 중괄호 이외의 모든 줄은 본질적으로 잘못되었습니다!
cnst
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.