.htaccess 리디렉션 http를 https로


86

이전 URL ( www1.test.net) https://www1.test.net
이 있는데 내 사이트에 SSL 인증서를 구현하고 설치 한 것으로 리디렉션하고 싶습니다 .
이것은 내 이전 파일입니다 .htaccess.

RewriteEngine On
RewriteRule !\.(js|gif|jpg|png|css|txt)$ public/index.php [L]
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ public/$1 [L]

.htaccessURL이 자동으로 리디렉션되도록 파일을 구성 하려면 https어떻게 해야 합니까?
감사!


: 두 번째 라인이 의도하는 경우 실제 파일의 경로 포인트 (당신과이 예상 가능한 확장을 나열하고), 기존 파일에 대한 검사로 교체하여 좀 더 유연하게 할 수 있다면 리디렉션을하지 RewriteCond %{REQUEST_FILENAME} !-f 다음 귀하의 리디렉션.
diamondsea

답변:


117

2016 업데이트

이 답변이 주목을 받으면서 가상 호스트를 사용하여 더 권장되는 방법을 힌트하고 싶습니다. Apache : Redirect SSL

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

<VirtualHost _default_:443>
   ServerName mysite.example.com
   DocumentRoot /usr/local/apache2/htdocs
   SSLEngine On
# etc...
</VirtualHost>

이전 답변, ssl-port가 80으로 설정되어 있지 않다는 점을 감안할 때 이것은 작동합니다.

RewriteEngine on

# force ssl
RewriteCond     %{SERVER_PORT} ^80$
RewriteRule     ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

이것이 첫 번째 재 작성 규칙이어야합니다.

편집 : 이 코드는 다음을 수행합니다. RewriteCond (ition)은 요청의 ServerPort가 80인지 확인합니다 (기본 http-port입니다. 다른 포트를 지정한 경우 조건을 조정해야합니다). 그렇다면 전체 URL을 일치시키고 (.*)https-url로 리디렉션합니다. %{SERVER_NAME}특정 URL로 대체 될 수 있지만 이렇게하면 다른 프로젝트의 코드를 변경할 필요가 없습니다. %{REQUEST_URI}은 TLD (최상위 도메인) 뒤의 URL 부분이므로 사용자는 원래 위치로 리디렉션되지만 https로 리디렉션됩니다.


1
감사합니다 ... 작동합니다 ... : D하지만 작동하는 이유를 설명해 주시겠습니까? ... 감사합니다 ... ^^
Bàn Chân Trần

1
그것이 당신을 위해 일했다는 것을 기쁘게 생각합니다. 코드에 대한 설명은 업데이트 된 답변을 확인하십시오. 이것으로 충분합니까?
Jojo

1
"이것이 첫 번째 재 작성 규칙이어야합니다." @Jojo는 나의 생명을 구했다 남자 : *
이반 Shulev

1
설명에 추가합니다. "[[L] 플래그] ( httpd.apache.org/docs/2.4/rewrite/flags.html#flag_l )로 인해 mod_rewrite가 규칙 세트 처리를 중지합니다." 일반적으로 기본적으로 이것을 추가하기를 원합니다. "[R] 플래그] ( httpd.apache.org/docs/2.4/rewrite/flags.html#flag_r )를 사용하면 HTTP 리디렉션이 브라우저로 발행됩니다." 없는 경우 리디렉션은 내부적이므로 HTTPS 사용의 의미를 무효화합니다. 기본적으로 발행 된 리디렉션은 상태 302 (임시 리디렉션)입니다. 브라우저가 새 URL을 ( "영구적으로") 캐시하도록하려면 [R=301]대신 사용하십시오.
Jānis Elmeris

1
VirtualHost 솔루션의 경우 복잡한 설정의 경우 "Redirect 영구"문을 어디에 배치해야하는지 명확하지 않습니다. 나는 정상 근처에서 가정하고 작동했습니다.
eyal_katz

178

다음을 사용하여 내 도메인의 모든 페이지를 http에서 https로 성공적으로 리디렉션합니다.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

리디렉션을 사용하여 301 'permanently moved'리디렉션되므로 SEO 순위를 전송하는 데 도움이됩니다.

302 'temporarily moved'변경 사항을 사용하여 리디렉션하려면[R=302,L]


5
이것은 "해키"허용 된 답변보다 더 적절합니다
am05mhz

7
어떤 경우에는 X-Forwarded-Proto가 필요합니다 RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
Kuzeko

1
여기에 훨씬 더 나은 대답이 있습니다
skrilled

이것은 Godaddy 서버에서 나를 위해 일했습니다. @Bradley 좋아요 !!
vishnu

이것은 다양한 서버 환경 및 사이트 설정에서 매번 작동했습니다. IMHO에 대한 권장 답변이어야합니다.
John Contarino

60

이것은 wwwHTTPS, 프록시 및 프록시 사용자가없는 경우에 가장 적합 합니다.

RewriteEngine On

### WWW & HTTPS

# ensure www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

### WWW & HTTPS

1
비 www로 리디렉션하는 방법?
Elyor

여기서이 사람들을 위해 지금까지 가장 좋은 대답입니다 %{HTTPS} off충분하지 않습니다
NoodleOfDeath

10

다음 코드로 https를 강제합니다.

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

1
@Niby는 내 답변의 날짜와 "이미 거기에있는 사람"을 확인하십시오.
Arda

6

HTTPS / SSL 연결이로드 밸런서에서 종료되고 모든 트래픽이 포트 80의 인스턴스로 전송되는 경우 다음 규칙이 작동하여 비보안 트래픽을 리디렉션합니다.

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

mod_rewrite모듈이로드 되었는지 확인하십시오 .


4

리디렉션하는 가장 좋은 방법을 찾고있는 중입니다 (html5boilerplate에서 제공됨).

# ----------------------------------------------------------------------
# | HTTP Strict Transport Security (HSTS)                              |
# ----------------------------------------------------------------------

# Force client-side SSL redirection.
#
# If a user types `example.com` in their browser, even if the server
# redirects them to the secure version of the website, that still leaves
# a window of opportunity (the initial HTTP connection) for an attacker
# to downgrade or redirect the request.
#
# The following header ensures that browser will ONLY connect to your
# server via HTTPS, regardless of what the users type in the browser's
# address bar.
#
# (!) Remove the `includeSubDomains` optional directive if the website's
# subdomains are not using HTTPS.
#
# http://www.html5rocks.com/en/tutorials/security/transport-layer-security/
# https://tools.ietf.org/html/draft-ietf-websec-strict-transport-sec-14#section-6.1
# http://blogs.msdn.com/b/ieinternals/archive/2014/08/18/hsts-strict-transport-security-attacks-mitigations-deployment-https.aspx

Header set Strict-Transport-Security "max-age=16070400; includeSubDomains"

아마도 2017 년에 누군가를 도울 것입니다! :)


2017 년에는 이것이 받아 들여진 대답이 될 것입니다. 그러나 .htacces 파일을 통해 HSTS를 활성화하려면 (질문에이 태그가 표시됨) IfModule 태그를 생략해야한다는 내용이 포함되어야합니다. 내가 허용 대답에서 여기에 링크를 기꺼이 것이라고 당신은 당신의 대답을 편집하는 경우
조조

안녕 조조! 이 늦은 답변에 대해 죄송합니다. # <IfModule mod_headers.c># </IfModule>줄을 모두 제거한다는 의미 입니까?
LIIT

이봐 LIIT, 그래 그게 내가 의미 한 바야.
Jojo

1
이 좋은 및 달성 또는 (아마) 원하는 효과를 지원하기 위해 도움을 수행하는 동안,이 하지 않는 HTTPS로 리디렉션 HTTP 요청을하고, 같은 질문에 대답하지 않습니다. 클라이언트가 이미 HTTPS를 통해 사이트에 액세스 한 경우에만 작동합니다 (지정된 max-age 간격 내). 따라서 항상 적절한 리디렉션이 수반되어야합니다.
Nicolai Ehemann

4

.htaccess 파일에이 코드를 삽입하십시오. 그리고 그것은 작동합니다

RewriteCond %{HTTP_HOST} yourDomainName\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://yourDomainName.com/$1 [R,L]

3

.htaccess 파일 끝에이 코드를 추가하십시오.

RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

1
아마도 mod_rewrite가 다른 답변과 마찬가지로이 답변에서 활성화되지 않았기 때문일 것입니다.
keji

RewriteEngine on이것의 맨 위에 추가 하면 작동합니다.
Giacomo1968 dec.

2

.htaccess 상단에 다음을 추가합니다.

RewriteEngine On
RewriteCond %{ENV:HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

2

이렇게하면 모든 불투명 프록시 조합에서 리디렉션이 작동합니다.

여기에는 클라이언트 <http> 프록시 <https> 웹 서버가 포함 됩니다.

# behind proxy
RewriteCond %{HTTP:X-FORWARDED-PROTO} ^http$
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]

# plain
RewriteCond %{HTTP:X-FORWARDED-PROTO} ^$
RewriteCond %{REQUEST_SCHEME} ^http$ [NC,OR]
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]

1

리디렉션에도 문제가있었습니다. 나는 Stackoverflow에서 제안 된 모든 것을 시도했습니다. 내가 찾은 한 가지 사례는 다음과 같습니다.

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

-1

.htaccess파일로 HTTPS 강제 적용

==> 모든 웹 트래픽 리디렉션 :-

모든 웹 트래픽이 HTTPS를 사용하도록 강제하려면 웹 .htaccess사이트의 루트 폴더 에있는 파일에 다음 코드 줄을 삽입하십시오 .

RewriteEngine On 
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

==> 지정된 도메인 만 리디렉션 :-

특정 도메인이 HTTPS를 사용하도록 강제하려면 .htaccess웹 사이트의 루트 폴더 에있는 파일에서 다음 코드 줄을 사용하십시오 .

RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteEngine On 
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

그래도 작동하지 않으면 처음 두 줄을 제거해보십시오.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

example.com을 https로 강제하려는 도메인 이름으로 바꾸어야합니다. 또한 www.example.com을 실제 도메인 이름으로 바꿔야합니다.

==> 지정된 폴더 리디렉션 :-

특정 폴더에 SSL을 적용하려면 해당 특정 폴더에있는 .htaccess파일에 아래 코드를 삽입하십시오 .

RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{REQUEST_URI} folder
RewriteRule ^(.*)$ https://www.example.com/folder/$1 [R=301,L]

폴더 참조를 실제 폴더 이름으로 변경해야합니다. 그런 다음 www.example.com/folder를 SSL을 적용 할 실제 도메인 이름 및 폴더로 바꾸십시오.


-1

도메인을로 바꾸면 domainname.com나와 함께 작동합니다.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domainname\.com [NC]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.domainname.com/$1 [R,L]

2
답변으로 코드 만 게시하지 말고 코드가하는 일과 질문의 문제를 해결하는 방법에 대한 설명도 제공하십시오. 설명이있는 답변은 일반적으로 더 유용하고 품질이 더 좋으며 찬성 투표를 유도 할 가능성이 더 높습니다.
Mark Rotteveel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.