이 RewriteRule의 의미는 무엇입니까? 단순화할 수 있나요?

이 RewriteRule의 의미는 무엇입니까? 단순화할 수 있나요?
RewriteRule ^he\/?(.*)$ "https\:\/\/example\.com\/$1" [R=301,L]

이 RewriteRule의 의미는 무엇입니까? 단순화할 수 있나요?

나는 그 책을 반복해서 읽었고, 매번 다시 길을 잃었습니다.

일치 he/하지만 나머지는 모두 이해할 수 없습니다.

답변1

설명하다

he및로 시작하는 URI 경로와 일치합니다.임의로 선택할 수 있는 /, 나머지 URI 경로를 캡처합니다(캡처 대괄호 세트가 하나만 있으므로 으로 캡처됩니다 $1). 쿼리 문자열이 있는 경우 이를 캡처하지 않습니다.

규칙을 다음과 같이 다시 작성합니다 https://example.com/$1.

R=301플래그는 아파치에게 영구 리디렉션 코드(301)를 사용하도록 지시합니다. 이 L플래그는 Apache에게 이 URI 경로에 대한 추가 재작성 규칙 처리를 중지하도록 지시합니다. 즉, 그 이상의 규칙이 있으면 패턴과 일치하더라도 적용되지 않습니다.

즉 , 다음 으로 he시작하는 모든 URI를 리디렉션합니다 .he/ orhttps://example.com/he/foo.htmlhttps://example.com/foo.html

단순화하다

ModRewrite 규칙의 패턴이나 대체에는 슬래시를 이스케이프할 필요가 없으므로 다음과 같이 단순화할 수 있습니다.

RewriteRule ^he/?(.*)$ https://example.com/$1 [R=301,L]

그건 그렇고, 이것이 he/문서 루트의 하위 디렉터리에 있는 모든 것을 리디렉션하는 것이라면 그렇게 할 것입니다. 그럴 것이다반품로 시작하는 문서 루트의 .html 또는 기타 파일을 캡처합니다( he예: hello.html로 리디렉션됨) https://example.com/llo.html.

이 작업을 수행하지 않으려면 ?을 제거하세요 /. 정규식에서 는 ?이전 요소를 0 또는 한 번 일치시키는 것을 의미합니다(즉, 일치하는 것은 선택 사항임). 패턴 일치를 필수로 설정 하려면 /선택 사항으로 만들지 말고 대신 다음을 사용하세요.

RewriteRule ^he/(.*)$ https://example.com/$1 [R=301,L]

그러나 heuri가 로 끝나지 않으면 /다음이 필요합니다.

RewriteRule ^he($|/.*$) https://example.com$1 [R=301,L]

IMO, 위의 규칙은 아마도 당신이 정말로 원하는 것일 것입니다... 그러나 /당신이 원하는 것이 선택 사항 이라면 /?그것은 패턴에 필요하지 않습니다. 그것은 여전히 /​​after가 있거나 없이 URI 와 일치할 것입니다 he:

RewriteRule ^he(.*)$ https://example.com/$1 [R=301,L]

URI 문제?

마지막으로, 귀하의 아파치 서버가 어떻게 설정되어 있는지는 모르지만 아파치 재작성 규칙에 의해 표시되는 URI는 일반적으로 로 시작하므로 패턴 /앞에 서버가 있어야 한다고 생각합니다 . 예를 들면 다음과 같습니다.he/

RewriteRule ^/he($|/.*$) https://example.com$1 [R=301,L]

관련 정보