내 nginx 리디렉션을 최대한 깨끗하게하려고합니다. ~ *는 대소 문자를 구분하지 않지만 예제 2에서만 작동하도록 이해할 수 있습니다.
실시 예 1
rewrite ^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
예 2-이 방법은 작동하지만 위의 줄만큼 효율적이지 않습니다.
if ( $request_filename ~* foobar ) {
rewrite ^ http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
}
너무 번거롭지 않고 예제 1로 대소 문자를 구분하지 않는 리디렉션을 수행하는 방법이 있습니까?
감사.
답변
나는 방금이 같은 문제를 겪었고 (고정) 대답을 찾으려고 노력했다. nginx 문서 ( http://nginx.org/en/docs/http/ngx_http_rewrite_module.html )는 ~ *가 if 문 내에서만 작동한다고 분명히 밝히지 않았지만 분명히 그 경우입니다.
if 문 외부에서 ngnix URL 다시 쓰기에 대해 대소 문자를 구분하지 않는 정규 표현식 일치를 얻으려면 Apache / Perl 스타일을 사용해야했습니다.
rewrite "(?i)foobar" http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
http://perldoc.perl.org/perlretut.html (무감각 검색)을 참조 하십시오 . 또한 특정 캡처 그룹 외부의 접두사 (? i)를 사용하면 전체 검색 문자열에 적용됩니다. 참고 : 이것은 “^”이 암시 된 것으로 보이므로 “^ (? i) foobar”에서는 작동하지 않는 것 같습니다.
그래도 확실하게하고 나중에 다시 쓰기를 유지하기가 쉽고 유지 관리가 쉽고 모호하지 않게하려면 다음과 같이하십시오.
location /foobar {
rewrite "(?i)" http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
}
도움이 되었기를 바랍니다…
답변
내가이 일을하기 위해 찾은 것 :
rewrite ^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
이 작업 만하면됩니다 :
rewrite (?i)^/foobar http://www.youtube.com/watch?v=oHg5SJYRHA0 redirect;
이것은 단지 선행 (? i)을 의미하고 그렇지 않으면 모든 것이 일치하도록 동일합니다.
답변
지금 웹 사이트에서 작업하면 이것이 잘 작동하는 것으로 나타났습니다. 같은 상황에 처한 사람들에게는 지난 몇 시간 동안있었습니다.
location ~* ^/foobar {
rewrite ^(.*)$ $scheme://$http_host/whatever/foobar redirect;
}