2012-10-05 3 views
1

Nginx는 정적 파일 만 제공하지만 일부 파일 이름에는 '?'가 포함되어 있습니다. 네, 물음표예요.'?'을 대체 할 Nginx 다시 쓰기 규칙 % 3f와 함께

'?'이 포함 된 모든 URL 파일이 실제로 존재하더라도 산출물 404. 예 :

> GET /foo?lang=ar.html HTTP/1.1 
... 
... 
< HTTP/1.1 404 Not Found 

foo는? 랭이라는 이름의 파일이 = ar.html이 예상 위치에 존재 않지만.

> GET /foo%3flang=ar.html HTTP/1.1 
... 
... 
< HTTP/1.1 200 OK 

어떻게 '?' % 3f (으)로 리디렉션됩니까?

foo%3Flang%3Dar.html 

에서 :

답변

1

당신은 ? 특히

=, 한 번 인코딩을 요청해야 할 파일의 이름과 같은 특수 문자를 탈출 쿼리 문자열을 url-encode해야 할 것은 이것이다 자바 스크립트는 encodeURIComponent() 함수를 사용하여 파일 이름을 URL로 인코딩 할 수 있습니다. PHP에서는 urlencode()입니다.

+0

질문은이 방법에 대한 요청을 리디렉션/재 작성하는 방법을 설정하는 방법입니다.) –

1

http 호출 전에 nginx ?%3F으로 인코딩해야합니다.

이유는 url rfc? 문자를 특수 문자로 예약하기 때문입니다 (3.3 절 참조). 결과적으로 nginx는 이스케이프 처리되지 않은 ? 문자를 URL의 경로 부분의 끝 부분으로 해석합니다.