Nginx가 한 경로를 다른 경로로 리디렉션


51

나는 이것이 이전에 요청되었다고 확신하지만 작동하는 솔루션을 찾을 수 없습니다.

웹 사이트에서 CMS 서비스를 전환했지만 도메인이 동일합니다. 단일 페이지에 대해 nginx 다시 쓰기를 설정하는 방법은 무엇입니까?

예 :

이전 페이지

http://sitedomain.co.uk/content/unique-page-name

새 페이지

http://sitedomain.co.uk/new-name/unique-page-name

유의하시기 바랍니다 내가 콘텐츠 페이지 내에서 모든 리디렉션되고 싶지 않아,하지만 말 그대로 그냥 URL이 위에서 언급 한. 설정에 약 9 개의 리디렉션이 있는데 그중 하나는 패턴에 맞지 않습니다.

감사!

편집 : 슬래시없이 리디렉션한다는 사실을 제외 하고는이 솔루션이 작동하는 것으로 나타났습니다.

if ( $request_filename ~ content/unique-page-name/ ) {
   rewrite ^ http://sitedomain.co.uk/new-name/unique-page-name/? permanent;
}

그러나 이것은 다음으로 리디렉션됩니다.

http://sitedomain.co.uknew-name/unique-page-name/

답변:


87

함정 및 일반적인 실수 에서 직접 인용 : 과세 재 작성 :

return 지시문을 사용하면 정규 표현식의 평가를 완전히 피할 수 있습니다.

영구 리디렉션 return대신 사용하십시오 rewrite. 이 사용 사례에 대한 나의 접근 방식은 다음과 같습니다.

location = /content/unique-page-name {
  return 301 /new-name/unique-page-name;
}

1
확실히 더 읽기 쉽습니다. 원래 URL에 있던 검색어도 유지됩니까?
SteveEdson

1
아니. 그렇지 않습니다. 영구적으로 리디렉션 할 때 쿼리를 유지하려면이 작은 트릭을 참조하십시오 ... gist.github.com/pothi/7152399
Pothi Kalimuthu

1
ifnginx에서 문장 을 사용하는 것이 좋지 않다고 생각하는 것이 맞 습니까? 다시 쓰기 방법을 사용하는 것보다 이것이 더 나은 방법입니까?
SteveEdson

1
ifreturn 지시문과 함께 사용하면 완벽합니다. wiki.nginx.org/IfIsEvil을 참조하십시오 . 예, IMO는 재 작성을 사용하는 것보다 낫습니다.
Pothi Kalimuthu

13

피할 수 있으면 if 문을 사용하지 않는 것이 이상적입니다. 이와 같은 것이 작동 할 수 있습니다 (예상되지 않음).

location ~ /content/(.*)$ {
    rewrite ^ /new-name/$1?$args permanent;
} 

1
그것이 컨텐츠 디렉토리 내의 모든 것을 포착하지 않습니까? 개별 항목 만 리디렉션하고 싶습니다. 예를 들어, 컨텐트 디렉토리에 다른 항목이 있지만 ... / another-new-name / unique-page-name2로 리디렉션해야합니다.
SteveEdson

1
나는 그것을 해결했다. 올바르게 리디렉션되지만 스크립트가 URL을 관리하는 중입니다.
SteveEdson

1
아, 나는 그 질문을 오해했다. 내용 부분 만 변경하고 싶다고 생각했습니다. 원칙은 동일합니다. 나는 당신을 위해 일하게되어 기쁘다.
Giveious

1
문제 없습니다. 도움을 주셔서 감사합니다. 앞으로는 분명히 사용해야합니다.
SteveEdson

12

나는 다음 해결책을 사용했다 :

rewrite ^(/content/unique-page-name)(.*)$   http://sitedomain.co.uk/new-name/unique-page-name/$2 permanent;

치료를합니다.


8

나를 위해 다음과 같이 등호없이 작동했습니다.

location /old-url {
  return 301 /new-url;
}

2
위치 블록이 전혀 필요하지 않습니다. 그냥 사용하십시오 rewrite. @SteveEdison의 답변을 참조하십시오.
PKHunter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.