루트 경로에 대해서만 www가 아닌 ​​www를 www로 리디렉션하고 http를 https로 리디렉션합니다.

루트 경로에 대해서만 www가 아닌 ​​www를 www로 리디렉션하고 http를 https로 리디렉션합니다.

다음 조건에 대해 mod_rewrite 규칙을 올바르게 구성하는 방법을 찾는 데 어려움을 겪고 있습니다.

  • 루트 경로에 대해서만 www가 아닌 ​​www를 www로, http를 https로 리디렉션합니다: / 즉. example.com
  • /test.html과 같은 다른 것은 무시하십시오. example.com/test.html

저는 디렉토리 규칙 내의 Apache 포함 파일에 규칙을 작성하고 있습니다.

내가 현재 사용하고 있는 것은 다음과 같습니다.

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

이는 www가 아닌 ​​모든 요청을 www로 올바르게 리디렉션하지만 HTTP 요청도 허용합니다. 이를 방지하고 싶지만 /에 대해서만 가능합니다. example.com

그런 다음 다음을 시도했습니다.

RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^$ https://www.example.com [L,R=301]

이는 (분명히) 효과가 있었지만 일반 브라우저에서는 제대로 작동했음에도 불구하고 모든 타사 가동 시간 모니터링 사이트가 HTTPS 가져오기 요청을 발행하는 것을 차단한 것으로 나타났습니다. 그래서 나는 아이디어가 부족합니다.

답변1

결과적으로 @MrWhite가 제안한 대로 제3자 모니터링 사이트가 리디렉션을 제대로 따르지 않는 경우가 있었습니다. HTTPS 프로토콜을 통해 직접 확인할 수 있도록 모니터링 경로를 편집하여 리디렉션을 방지함으로써 해결했습니다.

결국 재작성 규칙은 정확했고, 나는 디렉토리 서버 지시문별로 Apache에 포함된 루트 경로에만 사용하게 되었습니다.

RewriteCond %{HTTPS} !on [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^$ https://www.example.com [L,R=301]

그건 그렇고, htaccess/mod_rewrite 규칙으로 어려움을 겪고 있는 사람들을 위해 많은 테스트에 도움이 된 멋진 온라인 도구가 있습니다.https://htaccess.madewithlove.be/

귀하의 의견에 감사드립니다. 매우 감사.

관련 정보