내 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/') { ... }
.
그런 다음 무한 루프.
왜, 방금 혼란스러워졌습니다.
내가 하고 싶은 일은
- 요청하는 경우
example.com/a/
로 이동한example.com/a
다음 2로 이동합니다. - 요청한 경우
example.com/a
표시됩니다example.com/a/index.html
(단, URL은example.com/a
).
누구든지 내가 여기에 도달하도록 도와줄 수 있나요?
답변1
그것은 정확히 하려고 했던 일을 하고 있는 것입니다.
이런 일이 발생하기 전에 /a/index.html
계속 리디렉션하기 때문에 결코 연결할 수 없습니다 . /a
nginx가 이를 처리할 때 파일 시스템의 디렉터리를 확인하고 자동으로 /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.html
example.com/a