htaccess는 https : // www로 리디렉션
다음 htaccess 코드가 있습니다.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond !{HTTPS} off
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
내 사이트를 https://www.
HTTPS 로 리디렉션 하고 www.
하위 도메인을 적용하고 싶지만 http://www.
(HTTPS없이) 액세스 하면 HTTPS로 리디렉션되지 않습니다 https://www
.
먼저 HTTPS를 강제 실행하려면 올바른 환경 변수를 확인해야 %{HTTPS} off
하지만 위의 규칙 앞에 www.
시행 할 두 번째 규칙이 www.
있으므로 첫 번째 규칙에서 사용하지 마십시오.
RewriteEngine On
RewriteCond %{HTTPS} off
# First rewrite to HTTPS:
# Don't put www. here. If it is already there it will be included, if not
# the subsequent rule will catch it.
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Now, rewrite any request to the wrong domain to use www.
# [NC] is a case-insensitive match
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
프록시 정보
클라이언트가 HTTPS를 통해 프록시,로드 밸런서, 승객 응용 프로그램 등에 연결하는 일부 형태의 프록시 뒤에는 %{HTTPS}
변수가 존재하지 않으며 on
다시 쓰기 루프가 발생할 수 있습니다. 클라이언트와 프록시 /로드 밸런서가 HTTPS를 사용하더라도 애플리케이션이 실제로 일반 HTTP 트래픽을 수신하기 때문입니다. 이 경우 변수 X-Forwarded-Proto
대신 헤더를 확인하십시오 %{HTTPS}
. 이 답변은 적절한 과정을 보여줍니다
Michals 답변은 하나의 작은 수정으로도 나를 위해 일했습니다.
문제:
당신은있을 때 하나의 사이트 보안 인증서 // WWW : 시도는 https를하지 않고 페이지에 액세스하는 것을 브라우저를. (또는 인증서가 포함 된 도메인) 안전하고 정확한 https 페이지로의 리디렉션을 받기 전에는 못생긴 빨간색 경고 화면이 표시 됩니다.
해결책
먼저 www로 리디렉션하거나 인증서가 적용되는 도메인을 리디렉션 한 다음 https 리디렉션 만 수행하십시오. 이렇게하면 브라우저에 현재 URL을 포함하지 않는 인증서가 표시되므로 사용자에게 오류가 발생하지 않습니다.
#First rewrite any request to the wrong domain to use the correct one (here www.)
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#Now, rewrite to HTTPS:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
CloudFlare 또는 이와 유사한 CDN을 사용하는 경우 여기에 제공된 % {HTTPS} 솔루션에 무한 루프 오류가 발생합니다. CloudFlare 사용자 인 경우 다음을 사용해야합니다.
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
나쁜 해결책과 왜!
다음과 같은 코드를 사용할 때 아래 솔루션을 사용하지 마십시오.
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.example.com%{REQUEST_URI} [L,R=301]
브라우저는 다음으로 이동합니다.
http://example.com
그런 다음 다음으로 리디렉션합니다.
https://example.com
그런 다음 다음으로 리디렉션합니다.
https://www.example.com
서버에 너무 많은 요청 입니다.
대부분의 대답 조차도이 문제가 있습니다.
최고의 솔루션과 답변
이 코드에는 [OR]
URL의 이중 변경을 방지 하는 조건 이 있습니다 !
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [R=301,L]
이것이 프록시 사용자가 아닌 프록시에서 찾은 가장 좋은 방법입니다.
RewriteEngine On
### START 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]
### END WWW & HTTPS
거기에는 많은 해결책이 있습니다. 다음은이 문제를 직접 다루는 Apache 위키에 대한 링크입니다.
http://wiki.apache.org/httpd/RewriteHTTPToHTTPS
RewriteEngine On
# This will enable the Rewrite capabilities
RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
# This rule will redirect users from their original location, to the same location but using HTTPS.
# i.e. http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in httpd.conf
# or .htaccess context
http : // 또는 https : // 를 https : // www로 리디렉션하려면 모든 버전의 아파치에서 다음 규칙을 사용할 수 있습니다.
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]
아파치 2.4
RewriteEngine on
RewriteCond %{REQUEST_SCHEME} http [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]
% {REQUEST_SCHEME} 변수는 apache 2.4 부터 사용할 수 있습니다 .
CloudFlare를 사용하는 경우 이와 같은 것을 사용해야합니다.
# BEGIN SSL Redirect
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
# END SSL Redirect
이렇게하면 리디렉션 루프가 발생하지 않고 사이트가 SSL로 안전하게 리디렉션됩니다.
추신 : mod_rewrite.c를 확인하는 것이 좋습니다!
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
참고 : 다음 단계를 수행했는지 확인하십시오
- sudo a2enmod 다시 쓰기
- sudo 서비스 아파치 2 재시작
- /etc/apache2/sites-available/000-default.conf에있는 vhost 파일에 다음을 추가하십시오.
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
Require all granted
</Directory>
이제 .htaccess가 작동하고 사이트가 http : //에서 https : // www 로 리디렉션됩니다.
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R]
Amir Forsati의 솔루션 htaccess 와 유사 하지만 https : // www로 리디렉션 하지만 가변 도메인 이름의 경우 다음을 제안합니다.
RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%2%{REQUEST_URI} [R=301,L]
.htaccess 파일에 설정
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
이것은 https와 www 모두에서 작동합니다.
RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS
RewriteRule ^/?(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
첫 번째 답변을 시도했지만 작동하지 않습니다 ...이 작품 :
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{ENV:HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
참고 URL : https://stackoverflow.com/questions/13977851/htaccess-redirect-to-https-www
'Programing' 카테고리의 다른 글
Bash의 파일에서 마지막 줄을 제거하십시오. (0) | 2020.03.17 |
---|---|
"이 응용 프로그램은 백그라운드 스레드에서 자동 레이아웃 엔진을 수정하고 있습니다"오류가 발생합니까? (0) | 2020.03.17 |
“continue”키워드 란 무엇이며 Java에서 어떻게 작동합니까? (0) | 2020.03.17 |
신속한 이메일 주소 확인 방법? (0) | 2020.03.17 |
str_replace를 사용하여 첫 번째 경기에서만 작동합니까? (0) | 2020.03.17 |