내 htaccess 에이 기능이 있지만 그 기능을 파악할 수 없습니다. 규칙의 특성상 검색도 도움이되지 않습니다.
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
누구든지 그 내용을 설명해 주시겠습니까?
답변
이 규칙이하는 모든 후행를 추가하는 것입니다 /
존재하지 않는 경우 귀하의 URL로 더있는 경우 .
URI를에, 그래서 https://example.org/test
리디렉션되지 않습니다 https://example.org/test/
, 그러나 https://example.org/test.html
에 다시 쓸 수 없습니다 https://example.org/test.html/
(그러나 참고 : https://example.org/test.case/folder
또한 할 수 없습니다 로 리디렉션 https://example.org/test.case/folder/
에 포함로 .
URI에서 a ).
## Do the following if the URI does not end with `/` or does not contain an `.`:
## the . is relevant for file names like test.html, which should n
RewriteCond %{REQUEST_URI} !(/$|\.)
## Redirect it to the original URI with an added `/` and mark this as permanent:
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
답변
유효성 검사는 없지만 Apache 재 작성 경험을 사용하면이 구성은 다음과 같습니다.
- URI, 서버, 포트 또는 쿼리 매개 변수가 아닌 ‘path’부분에서 일치합니다 (예 : ‘/my/location/file.html’).
- 이 부분이 ‘/'(슬래시) 문자로 끝나지 않거나 ‘.’를 포함하지 않으면 일치합니다. (점) 문자.
- URI의 전체 경로 부분을 사용하고 슬래시를 추가하십시오.
- 브라우저를이 새로운 URI로 보내려면 HTTP 301 (영구적) 리디렉션을 보내십시오.
다음과 같은 테스트 사례가 발생합니다.
/ -> /
/test -> /test/
/my/resource -> /my/resource/
/my/resource.type -> /my/resource.type
/edge.case/resource -> /edge.case/resource
따라서 규칙에는 파일이 아닌 리소스에 슬래시를 추가하는 것이 목적이라고 생각하지만 엣지 케이스가있는 것 같습니다.
‘.’를 사용하여 자원에 슬래시를 추가하지 않으면 경로의 파일이 아닌 부분의 (도트) 문자는 정규식을 다음과 같이 변경해야합니다.
# match paths which do not end with a slash, or do not resemble a file with an extension
RewriteCond %{REQUEST_URI} !(/$|\.[^/]+$)
# redirect permanently to the same uri with a slash
RewriteRule (.*) %{REQUEST_URI}/ [R=301]