Program Tip

ServerName이없는 기본 가상 호스트에서 HTTP를 HTTPS로 리디렉션

programtip 2020. 11. 9. 20:30
반응형

ServerName이없는 기본 가상 호스트에서 HTTP를 HTTPS로 리디렉션


내 아파치 서버에서 들어오는 모든 http 요청을 동등한 https 요청으로 리디렉션 할 수 있기를 원합니다. 문제는을 지정하지 않고 기본 가상 호스트에 대해이 ServerName작업을 수행하고 요청 URL에 나타난 서버 이름에 상관없이 리디렉션이 작동 하도록 하고 싶습니다 . 나는 다음과 같은 것을 바라고 있습니다.

NameVirtualHost *:80
<VirtualHost *:80>
    RedirectPermanent / https://%{SERVER_NAME}/
    ...
</VirtualHost>

이것이 가능 합니까 아니면 Redirect의지해야 Rewrite합니까?


가상 호스트 구성에 다음을 추가하십시오.

RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]

둘 다 잘 작동합니다. 그러나에 따라 아파치 문서 는 사용하지 않아야합니다 mod_rewrite간단한 리디렉션을 위해, 그리고 사용하는 Redirect대신. 따라서 그들에 따르면 바람직하게는 다음을 수행해야합니다.

<VirtualHost *:80>
    ServerName www.example.com
    Redirect / https://www.example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost>

/후에는 Redirect이 재 지정해야하는 경우 두 번째 부분은 상기 URL이다.

URL을 하위 도메인으로 리디렉션하는 데 사용할 수도 있습니다. Redirect /one/ http://one.example.com/


이것은 불필요한 리디렉션을 생략하는 완전한 방법이기도합니다.)

* : 80 VirtualHost 항목의 RewriteRule에는 조건이 필요하지 않으므로 이러한 규칙은 .htaccess 파일에서 사용하기위한 것입니다.

RewriteEngine on
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]

계획 :

RewriteEngine on

==> 엔진 활성화

RewriteCond %{HTTPS} off [OR]

==> 비 https 연결에서 일치 또는 ([OR]을 설정하지 않으면 암시 적 AND!)

RewriteCond %{HTTP:X-Forwarded-Proto} !https

==> https 없이 전달 된 연결 (프록시,로드 밸런서 등)에서 일치

RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]

==> 두 조건 중 하나가 일치하면 전체 URL을 다시 작성하여 클라이언트가이를 '학습'하도록 301을 전송하고 (일부는 수행하고, 일부는 수행하지 않음) 마지막 규칙에 대해 L을 보냅니다.

참고 URL : https://stackoverflow.com/questions/11621053/redirect-http-to-https-on-default-virtual-host-without-servername

반응형