certbot을 통해 SSL을 설치했으며 내 모든 사이트는 SSL을 통해 액세스할 수 있습니다.
그러나 브라우저 URL에 http가 사용되면 아래에서 첫 번째 URL만 https로 리디렉션됩니다. 다른 것들은 https로 리디렉션되지 않고 계속 http에 있습니다.
- mydomain.com
- xx.mydomain.com
- yy.mydomain.com
포트 80의 경우 virtualhosts 파일의 다시 쓰기 논리 내용은 다음과 같습니다.
RewriteEngine on
RewriteCond %{SERVER_NAME} =mydomain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
포트 443의 경우 가상 호스트의 내용은 다음과 같습니다.
DocumentRoot /var/www/html
ServerName mydomain.com
Include /etc/letsencrypt/options-ssl-apache.conf
ServerAlias xx.mydomain.com
ServerAlias yy.mydomain.com
SSLCertificateFile /etc/letsencrypt/live/yy.mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yy.mydomain.com/privkey.pem
보시다시피 도메인과 하위 도메인은 동일한 문서 루트 디렉터리를 가리킵니다.
브라우저에 http를 입력하면 위에 나열된 모든 URL이 https로 리디렉션되도록 만드는 방법은 무엇입니까? 서버 별칭으로 구성된 하위 도메인에 대해 이 작업을 수행하려면 포트 80의 다시 쓰기 논리에서 정확히 무엇을 변경해야 하는지 잘 모르겠습니다.
답변1
귀하의 구성은 조건부( 에 대한 요청에 따라 =example.com
)이므로 RewriteRule은 요청을 에 리디렉션하지 않습니다 xx.example.com
.
다음 중 하나를 수행할 수 있습니다.
해당 조건을 개선합니다(여전히 특정(하위) 도메인에 대해서만 리디렉션하려는 경우). 그다지 아름답지는 않지만 예를 들면 다음과 같습니다.
RewriteEngine on RewriteCond %{SERVER_NAME} =example.com [OR] RewriteCond %{SERVER_NAME} =xx.example.com [OR] RewriteCond %{SERVER_NAME} =yy.example.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
new-subdomain.example.com
조건을 완전히 제거하고 모든 것을 https로 리디렉션합니다( 아직 유효한 인증서가 없는 https로 리디렉션할 위험도 있음 ).RewriteEngine on RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]