nginx "return 301" 및 "try_files"가 무한 루프에 빠지는 이유

nginx "return 301" 및 "try_files"가 무한 루프에 빠지는 이유

내 conf 코드:

index index.html index.php;
location / {
    if ($uri = '/a/') {
        return 301 https://example.com/a;
    }
    try_files $uri $uri/ =404; 
}

url이 /a/301이면 /a, 부분은 끝에 try_files추가 되고 가 됩니다 .//a/a/

index다음 단계에서는 정의를 시도하고, 되고 /a/index.html, 파일에 도달할 것이라고 생각합니다 .

그러나 실제로는 을 시도 /a/하고 을 뛰어내린 location다음 location다시 으로 들어갑니다 if ($uri = '/a/') { ... }.

그런 다음 무한 루프.

왜, 방금 혼란스러워졌습니다.


내가 하고 싶은 일은

  1. 요청하는 경우 example.com/a/로 이동한 example.com/a다음 2로 이동합니다.
  2. 요청한 경우 example.com/a표시됩니다 example.com/a/index.html(단, URL은 example.com/a).

누구든지 내가 여기에 도달하도록 도와줄 수 있나요?

답변1

그것은 정확히 하려고 했던 일을 하고 있는 것입니다.

이런 일이 발생하기 전에 /a/index.html계속 리디렉션하기 때문에 결코 연결할 수 없습니다 . /anginx가 이를 처리할 때 파일 시스템의 디렉터리를 확인하고 자동으로 /a/.

이 부적절한 리디렉션을 제거해야 합니다.

답변2

ServerFault에 오신 것을 환영합니다. 다음 코드를 사용하여 OP에 언급된 작업을 수행할 수 있습니다.

location / {
    if ($uri = '/a/') {
        return 301 https://example.com/a;
    }
    try_files $uri $uri/index.html =404; 
}

다음에서 관련 질문과 허용된 답변을 확인하세요.nginx를 사용하여 URL에서 후행 슬래시 제거.

기본적으로 우리는 의지할 필요가 없고 요청이 있을 때 직접 index서비스를 제공합니다 .index.htmlexample.com/a

관련 정보