2014-12-10 2 views
1

작동하는 위치 및 다시 쓰기 지시문 쌍이 있지만 최적화 할 수 있어야하는 중복이 있습니다. /css/20141201-styles.css과 같은 외부 URL을 사용하며 /css/styles.css을 제공합니다.중복 Nginx 위치 및 다시 쓰기 정규 표현식

location ~ '^/(css|js)/[0-9]{8}-' { 
    rewrite '^/(css|js)/[0-9]{8}-(.*)$' /$1/$2; 
} 

내가 두 번 일하고있는 것처럼 보입니다. 한 번 일치하고 다시 한 번 다시 쓰는 것 같습니다. location 지시문에서 일치 항목을 캡처 한 다음 rewrite에서 일치하는 방법이 있습니까?

아파치에서
location ~ '^/(css|js)/[0-9]{8}-(.*)$' { 
    rewrite [something here?] /$1/$2; 
} 

, 그것은 다음과 같습니다

RewriteRule ^/(css|js)/[0-9]{8}-(.*)$ /$1/$2 [NC,L] 

솔루션 Terra-

감사를 alias 지시자를 지적! 이 location은 이미 지시어를 적용하는 다른 location에 중첩되어 서버 경로를 처리합니다.

location ~ ^/(css|images|js)/ { 
    location ~ '^/(css|js)/[0-9]{8}-(.*)$' { 
     alias /$1/$2; 
    } 
    root /server/path/to/web/root; 
} 

UPDATE

이 또한 작동하고, 적은 수의 라인을 가지고있다. rewrite 지시문의 break 플래그가 server 수준의 루핑을 방지하여 just as performantalias 솔루션으로 만듭니다.

location ~ ^/(css|images|js)/ { 
    rewrite '^/(css|js)/[0-9]{8}-(.*)$' /$1/$2 break; 
    root /server/path/to/web/root; 
} 
+0

재 작성은 항상 루트 또는 별명보다 최적입니다. 간단한 이유가 있습니다. 다시 쓰기는 내부 요청 URI를 변경하기 때문에 일치시킬 위치를 찾아야합니다. 백엔드에 대한 루트, 별칭 또는 디스패치 위치는 최종적이며 제공 될 수 있습니다. – Melvyn

+0

@Melvyn - 당신은 그것에 대한 몇 가지 문서를 지적 해 주시겠습니까? 나는 네가하는 말을 잘 따르지 않고, 나는 그걸 좀 더 깊이 읽고 싶다. – Sonny

+1

물론, 재 작성을위한 문서를보십시오. 재 작성이 완료되면 새 URL이 다시 사용 가능한 위치와 일치됩니다. – Melvyn

답변

2

해결책 1 : 별도의 위치를 ​​만들지 말고 rewrite을 다른 곳으로 이동하십시오. 예 : location /.

해결 방법 2 :

location ~ ^/(css|js)/[0-9]{8}/ { 
    alias /server/path/to/web/root/$1/; 
} 
+0

'alias' 지시어는 * 정확히 * 내가 원하는 것처럼 보입니다! – Sonny

+0

범위를 너무 광범위하여 스택 오버플로 생각하기 때문에 코드 검토에 대한 게시물을 만들었습니다. http://codereview.stackexchange.com/q/73342/49814 – Sonny

+0

솔루션 3은 파일을 심볼릭 링크하는 것입니다. ;-) – Melvyn