nginx는 /2013/04/test.html을 /test로 리디렉션합니다 - 작동하지 않습니다

nginx는 /2013/04/test.html을 /test로 리디렉션합니다 - 작동하지 않습니다

나는 이것 때문에 정신이 나갔어. nginx와 /2013/04/test.html같은 특정 URL을 어떻게 리디렉션할 수 있나요 ?/test

나는 이것을 시도했지만 작동하지 않습니다.

server {
     location /2013/05/test.html {
         return 301 http://$server_name/test;
     }
}

몇 가지 테스트를 수행했습니다. 어떤 이유로 구성 줄의 위치 부분에 .html 확장자가 없는 URL은 올바르게 리디렉션되지만 kaboom 위치에 .html을 배치하자마자 작동이 중지됩니다.

왜 이런지 아세요? 감사합니다!

답변1

각 리디렉션에 대한 위치 블록을 갖는 대신 언제든지 기존 위치 블록에 다시 쓰기 규칙을 추가할 수 있습니다.

rewrite /2013/05/test.html http://$server_name/test permanent;
rewrite /2013/05/test2.html http://$server_name/test2 permanent;

또한, 새로운 '영구 링크'가 추가될 때마다 새로운 정규식을 추가하지 않아도 되도록 다양한 정규 표현식을 사용할 수 있습니다.

답변2

나는 Jason Ilicic의 의견에 동의합니다.규칙 다시 작성아마도 더 효율적일 것입니다.

정말로 사용하고 싶다면위치 블록, "=" 수정자를 사용해 보셨나요? 여러 위치가 있는 경우 Nginx 선택 논리가 예상한 것과 다른 위치를 선택할 수 있습니다.

Nginx 문서에서

using the “=” modifier it is possible to define an exact match of URI and location

예를 들면

server {
    location = /2013/05/test.html {
        return 301 http://$server_name/test;
    }
}

관련 정보