Programing

htaccess는 https : // www로 리디렉션

lottogame 2020. 3. 17. 08:31
반응형

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]

참고 : 다음 단계를 수행했는지 확인하십시오

  1. sudo a2enmod 다시 쓰기
  2. sudo 서비스 아파치 2 재시작
  3. /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

반응형