2011-03-11 4 views
13

mod_rewrite에서 [NE] (noescape) 플래그를보고 있습니다. 어떤 생각을 한 후에는 내가 상황을 파악할 수 없을 때 가 아닌 깃발을 사용하고 싶습니다. 의미, 거의 모든 RewriteRule에서 플래그를 활성화 유지하는 것이 도움이 될 것 같습니다. 이 플래그를 호출하지 않으면 몇 가지 상황에서 문제가 발생합니다.mod_rewrite NE 플래그 - URL에 특수 문자를 인코딩하는 것이 언제 도움이됩니까?

내가 다루는 규칙의 대부분은 통과하지 않고 HTTP 리디렉션 ([R])입니다.

mod_rewrite가 URL을 인코딩하도록하는 것이 도움이 될 때 누군가 에 관해 밝혀 줍니까?

이 플래그를 사용하거나 mod_rewrite가 이러한 특수 문자를 이스케이프하도록 허용하는 기본 동작을 사용하는 것이 일반적입니까? 왜?

+3

큰 질문입니다. 아직 답변을 얻지 못했습니다.또한 www가 아닌 ​​www 리다이렉션 (또는 그 반대)에 대한 SO에 대한 수십개의 답변이'RewriteRule'에'[NE]'를 추가하지 않는다는 것에 훨씬 더 놀랐습니다. 내 하루를 구 했으므로 mod_rewrite 리디렉션 중 내 URL이 두 번 인코딩 된 이유를 알 수 없습니다. +1 –

답변

1

플래그는 요청 URL을 권한 부여 서명의 일부로 추가 할 때 매우 유용합니다.

권한이 .htaccess가 작동하지 않지만 작동하지 않는 버그가 생겼습니다. 원인은 리디렉션이 PHP $_GET 매개 변수로 끝난 항목을 인코딩하는 URL 인 것으로 나타났습니다. 내가 변경 한 버그를 해결하기 위해 :

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*[^/0-9])$ $1/ [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*[^/0-9])$ $1/ [NE,R=301,L] 

에을 (인증 서명이 여러 가지로 구성되어, 이들 중 하나는 요청 URL)

+2

Downvoter, 의견이 있으십니까? –

+2

* "mod_rewrite가 URL을 인코딩하도록하는 것이 도움이 될 때 누군가에게 도움을 줄 수 있습니까?" "* – 5ervant

+0

@Servant - 왜이 플래그를 사용하는 것이 좋은지, mod_rewrite가 이러한 특수 문자를 이스케이프하도록 허용하는 기본 동작은 무엇입니까? 예를 들어. - 기본적으로이 깃발의 사용 경험을 공유하십시오. –

3

당신이 source code for mod_rewrite 보면 noescape을 사용하는 경우 proxy-nocanon 플래그를 설정하는 것을 알 수 있습니다.

하는 mod_proxy_http가이 URI 정규화 및 mod_proxy_http가에 대한 파일 이름에있는 (아마도 qsappend'd) 쿼리 문자열을 보존하지 않습니다 있는지 확인하십시오 : proxy_http_canon합니다 (revision where that line was first added에서

, 또한이 댓글을 포함

: 당신이 mod_proxy documentation을 읽을 경우)

이에 이어, 당신은 nocanon의 다음과 같은 언급을 볼 수 있습니다

일반적으로 mod_proxy는 ProxyPassed URL을 표준화합니다. 그러나 이것은 일부 백엔드, 특히 PATH_INFO를 사용하는 백엔드와 호환되지 않을 수 있습니다. 선택적 nocanon 키워드는 이것을 억제하고 URL 경로 "raw"를 백엔드로 전달합니다. 백엔드의 보안에 영향을 줄 수 있습니다. 프록시에서 제공하는 URL 기반 공격에 대한 정상적인 제한된 보호를 제거하기 때문입니다. 난

는 착각,하지만 mod_proxy를에 nocanon의 사용이 (그리고 mod_rewrite는의 확장 noescape에 의해) 잠재적 인 보안 파급 효과를 가지고 나에게 의미 할 수있다. 이는 기본적으로 사용 중지 된 이유를 설명하고 심지어 대부분의 경우이 기능을 사용 가능하게 설정하는 것이 더 유용 할 것 같다고 생각할 수도 있습니다.

관련 문제