내 htaccess 에이 기능이 있지만 그 기능을 파악할 수 없습니다. 규칙의 특성상 검색도 도움이되지 않습니다.
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule (.*) %{REQUEST_URI}/ [R=301]
누구든지 그 내용을 설명해 주시겠습니까?
내 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]
/test.case/folder
도 리디렉션되지 않습니다"-부. 그러나 "폴더"가 파일 시스템 디렉토리 인 경우 mod_dir은 기본적으로 후행 슬래시를 추가하기 위해 301 리디렉션을 발행합니다. /test.case/some-other-virtual-url
후행 슬래시가 있어야하는 경우에만 문제가됩니다 .
유효성 검사는 없지만 Apache 재 작성 경험을 사용하면이 구성은 다음과 같습니다.
다음과 같은 테스트 사례가 발생합니다.
/ -> /
/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]
!(\/$|\.[^\/]*)
-업데이트 된 정규 표현식은 실제로 다르지 않습니다. 두 번째 부분 (확장자와 일치하는)에도 문자열 끝 앵커가 필요합니다. 아마도 다음과 같습니다 : !(/|\.[a-zA-Z]+)$
(슬래시를 벗어날 필요가 없습니다).
/
않고 ".
"를 포함하지 않는 경우 요청을에 추가하여 리디렉션하십시오/
. 이 규칙의 가능한 의도는 자동 디렉토리 색인 작성을 처리하는 것입니다.