후행 슬래시를 추가하기 위해 리디렉션을 생성하려고 합니다.
location / {
if($request_uri ~ ^([^.]*[^/])$){
return 301 https://$host$request_uri/;
}
}
단순히 /를 사용하여 리디렉션을 만들 때 작동하는 경우 일치하는 방법을 모르겠습니다. 이 정규 표현식이 손상된 것 같습니다.
업데이트
다시 작성해 보았습니다.
location / {
rewrite ^([^.]*[^/])$ $1/ permanent;
.....
}
그리고
if ($http_x_forwarded_proto != "https") {
return 301 https://$host$request_uri;
}
잘 작동하고, https로 리디렉션되고, 정규 표현식도 만들고 싶었습니다.
답변1
오래 전에 해결되었지만 많은 사람들이 이 질문을 확인하는 것을 보았습니다. 따라서 올바르게 기억하면 다음 코드 줄이 없었고 리디렉션되었습니다.
port_in_redirect off;
알아요. 문제의 포트에 대해서는 언급하지 않았습니다. 답변을 드릴 수는 없지만 누군가 같은 문제가 있는 경우 여기에 남겨 두겠습니다.
답변2
질문을 올바르게 이해했다면 301 리디렉션을 사용하지 않고 자동으로 서비스를 제공하고 싶습니다.http://example.com/foo/index.html요청이 있을 때http://example.com/foo뒤에 슬래시가 없나요?
그렇다면 이 try_files 구성이 작동한다는 것을 알았습니다.
try_files $uri $uri/index.html $uri/ =404;
- 첫 번째는
$uri
uri와 정확히 일치합니다. - 두 번째는
$uri/index.html
경로의 마지막 요소가 후행 슬래시 없이 디렉터리 이름과 일치하는 index.html을 포함하는 디렉터리와 일치합니다. - 세 번째는
$uri/
디렉토리와 일치합니다. - 네 번째는
=404
앞의 패턴 중 일치하는 패턴이 없으면 404 오류 페이지를 반환합니다.
답변3
예상대로 작동하는 것 같습니다.
location / {
if ($request_uri ~ ^([^.]*[^/])$) {
return 301 https://$host$request_uri/;
}
try_files $uri $uri/ /index.html;
....
}
if
명령문에 공백이 누락되어 발생한 구문 오류(오타일 수 있음)를 제외하고는 시도한 것과 차이점이 있는지 확실하지 않습니다 . ...또는 다른 지시어가 있기 때문에 이 지시어를 무시하는 것을 표시하지 않을 수도 있습니다.