url-rewrite - nginx 디렉토리 이후의 슬래시 문제
给我你的怀抱
给我你的怀抱 2017-05-16 17:29:15
0
2
791

환경: nginx 버전은 1.2.6
최근 프로젝트 작업 중 이상한 문제가 발생했습니다. URL을 다시 디자인하고 싶어서 다음과 같은 nginx 재작성 규칙을 사용했습니다.

으아악

이 다시 쓰기 규칙은 일반적으로 사용되는 문제가 있는지 모르겠습니다~(조언 부탁드립니다)

이 규칙을 사용하지 않았을 때 서버의 기존 디렉터리에 액세스할 때 슬래시가 자동으로 추가되었습니다. 이때 nginx의 자동 다시 쓰기 규칙이 실행되는 것은 정상이며 문제가 없습니다.

하지만 위의 규칙을 추가한 후에는 서버에 이미 존재하는 폴더에 액세스할 때 슬래시가 자동으로 추가되지 않습니다. 또한, 반복적인 테스트 결과 두 번째와 세 번째 규칙이 문제를 일으키는 것으로 나타났습니다.

1. 두 번째 규칙만 삭제하면 폴더 존재 여부에 관계없이 존재하지 않는 것으로 감지되고 슬래시가 추가되지 않으며 세 번째 규칙이 직접 입력되어 최종적으로 색인과 일치됩니다. .php 이때 파일별로 처리되는 것을 볼 수 있다.

2. 두 번째 규칙이 삭제되면 세 번째 규칙에 따라 파일-f 改为 -e, 즉 파일 또는 폴더가 결정됩니다.

으아악

이제 문제는 해결되었습니다. 디렉터리가 있으면 자동으로 슬래시가 추가되고, 없으면 일치하여 index.php가 입력됩니다.

너무 헷갈립니다. 조언 좀 부탁드립니다. 왜 이럴까요?

또한 프로젝트의 일부 원래 문제로 인해 세 번째 규칙에 다른 대상 재작성 규칙이 많이 있으므로 입력이 폴더이고 일치하는 경우 세 번째 규칙을 입력하고 싶지 않습니다. 성능에 미치는 영향은 크지 않지만 규칙입니다.

给我你的怀抱
给我你的怀抱

모든 응답(2)
大家讲道理

많은 테스트 끝에 제가 직접 알아냈습니다.

이 세 가지 규칙에는 아무런 문제가 없으며, 앞서 말한 것처럼 두 번째 규칙도 이상하지 않습니다.

먼저 nginx는 사용자 정의 규칙에 따라 일치합니다. 입력한 경로가 존재하고 끝에 슬래시가 포함되어 있지 않으면
index.php가 내 폴더 $request_filename/index.php匹配第二条规则成功,注意这里的/에 존재하므로 후속 매칭을 수행합니다. 즉, 이 폴더가 존재하고 이 폴더에 index.html 또는 index.php가 있는 한 위에서 제시한 첫 번째 또는 두 번째 규칙과 일치하므로 의심의 여지가 없습니다.

따라서 첫 번째 또는 두 번째 규칙 이후 일치를 피하고 폴더가 존재할 때 자동으로 슬래시를 추가하려면 첫 번째 규칙 전에 폴더에 대한 판단을 추가하는 것이 해결책입니다.

으아아아

이 규칙의 의미는 폴더가 존재하고 슬래시가 없으면 자동으로 슬래시를 추가하고 301 점프를 수행하여 문제가 해결된다는 것입니다.

过去多啦不再A梦

마지막 논리는 이전 조건이 충족되지 않으면 "접근한 경로가 파일이 아닌 경우" 자동으로 /index.php로 점프한다는 것입니다.

제안: 세 번째 항목 앞에 문장 -e를 삽입하여 폴더인지 확인하세요. 그렇다면 자동으로 슬래시와 줄 바꿈을 추가하세요.

테스트되지 않았으며 참고용으로만 사용하세요.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿