2011-05-10 4 views
0

내가 nginx를 재 작성 규칙을 다음과 같이 몇 가지 URL을 다시하려고Nginx의 재 작성 제대로 인용 앰퍼샌드 원인이 문제

rewrite ^/some\/url\/(.*)\/$ /some/url/?filter=$1; 

재 작성이 작동하지 않는 것 내가

?filter=abcd%20%26%20N%20efgh 

내 문제에 적절하게 인용하고

?filter=key:abcd & efgh 

에만 작동하지 않는 URL /som/url/key:abcd%20%26%20N%20efgh을 다시 작성됩니다. 내가 /some/url/?filter=abcd%20%26%20N%20efgh처럼 접근하면 잘 동작합니다.

내가 누락 된 항목이 있습니까?

감사합니다.

+0

아파치의 mod_rewrite 문제. 재 작성 규칙을 처리하기 전에 URL 디코딩을 어느 정도 완료했다고 생각합니다. 결국, 원시 URL을 PHP에 전달하고'$ _SERVER [ 'REQUEST_URI']'를 직접 구문 분석해야했습니다. –

답변

0

. "는 $ 인수의 변수가 위치 일치 동안의 URI는 달리, 디코딩되지 않도록주의하고, 문제가 해결되었다 최신 안정 릴리스 (1.0)로 업그레이드하여 업그레이드하십시오.

0

다시 작성하려는 URL을 다른 "위치"에 넣으면 문제가 해결 될 수 있습니다. 그래서 당신의 예를 들어이 될 것 을 (난 어떤 이스케이프하지 않는 위치 지시자의 nginx에서 가정) :

location /some/url/ { 
if ($uri ~* ^/some/url/(.*)$ 
{ 
    rewrite ^.*$ /some/url/?filter=$1 break; 
} 
proxy_pass    http://127.0.0.1:8080; 
#proxy_set... <- and other proxy related things 
} 

적어도 나를 위해 일한 (내 경우에도 물음표가 "% 3 층으로 대체되었다 ". 공식 문서에서 발췌"나는 내가 Nginx에 (7.6) 이전 버전을 사용하고있는 것을 발견 http://wiki.nginx.org/HttpRewriteModule