programing

.htaccess를 사용하여 HTTP를 HTTP로 리다이렉트합니다.

magicmemo 2023. 2. 25. 20:52
반응형

.htaccess를 사용하여 HTTP를 HTTP로 리다이렉트합니다.

투고를 비롯해 여러 가지(1, 2, 3, 4)를 시도했지만 모두 TOO_MANY_REDIRECTS 또는 에러 500이 됩니다.자, 제 문제는 이렇습니다.

현재 .htaccess를 사용하면 다음과 같이 됩니다.

https://www.dukescasino.com/ - 완벽하게 동작

https://dukescasino.com/ - 위의 내용으로 리다이렉트 합니다.

다음 두 가지 옵션은 정상적으로 로딩되지만 https 버전으로 리다이렉트됩니다.

http://www.dukescasino.com/

http://dukescasino.com/

현재 .htaccess는 다음과 같습니다.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

관련이 없다고 생각합니다만, 관련성이 있는 경우는, 다음의 액티브한 플러그 인의 리스트를 참조해 주세요.

  • 상세 커스텀 필드
  • 올인원 SEO 팩
  • 탐색 메뉴의 Bop 검색 상자 항목 유형
  • 문의폼7
  • 코멘트를 무효로 하다
  • 구글 XML 사이트 맵
  • Jetpack by WordPress.com
  • 검색 및 필터
  • 슬라이더 WD
  • 테이블 프레스
  • Updraft Plus - 백업/복원
  • Wordfence 보안
  • WPide
  • WP 스머시
  • WP 슈퍼 캐시

실행된 테스트:

테스트 A:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

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.
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

결과: ERR_TOO_MANY_REDIRECTS

테스트 B:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
 
# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

결과: ERR_TOO_MANY_REDIRECTS

테스트 C:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{SERVER_PORT} ^80$
 RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
 
# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

결과: ERR_TOO_MANY_REDIRECTS

테스트 D:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

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

# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

결과: ERR_TOO_MANY_REDIRECTS

테스트 E:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

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

# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

결과: 302가 발견되었습니다.또한 ErrorDocument를 사용하여 요청을 처리하는 동안 500 내부 서버 오류가 발생했습니다.

Dreamhost에서는 다음과 같이 동작했습니다.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

문제 해결!

최종 .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

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

# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

효과가 있습니다.

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !on           
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

제 경우 htaccess 파일에는 Far Future Expiration이나 WPSuperCache 의 플러그인에 의해 설치된 많은 규칙과 워드프레스 자체의 행이 포함되어 있습니다.

문제를 일으키지 않기 위해 htaccess의 상단에 솔루션을 배치해야 했습니다(이것은 중요합니다.마지막에 배치하면 캐시 플러그인과의 충돌로 인해 잘못된 리다이렉트가 발생합니다).

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

이렇게 하면 설정이 변경되어도 워드프레스에 의해 행이 흐트러지지 않습니다.또, 문제없이 반복할 수 있습니다.

Jason Shah가 깔끔한 htaccess 규칙을 지켜줘서 고마워.

참고로 호스팅 프로바이더에 따라 다릅니다.

제 경우(Infomaniak)는 위의 어떤 것도 실제로 작동하지 않았고 무한 리다이렉트 루프가 발생하였습니다.

올바른 방법은 지원 사이트에 설명되어 있습니다.

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://your-domain.com/$1 [R=301,L]

따라서 항상 호스팅 공급자에게 문의하십시오.이 방법을 설명하는 기사가 있었으면 좋겠어요.그렇지 않으면 지원부에 문의하십시오.

이것은 테스트 완료로 사용하기에 안전합니다.

이유: Wordpress가 재작성 규칙을 편집할 때 HTTPS 규칙을 삭제하지 않도록 하십시오.그러면 Wordpress 기본 규칙과 충돌하지 않습니다.

<IfModule mod_rewrite.c>
   RewriteCond %{HTTPS} !=on
   RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
</IfModule>

# BEGIN WordPress
<IfModule mod_rewrite.c>
  #Your our Wordpress rewrite rules...
</IfModule>
# END WordPress

주의: WordPress 주소 및 사이트 주소 URL을 다음과 같이 변경해야 합니다.https://[ General Settings ](일반 설정)도 참조해 주세요.wp-admin/options-general.php)

유감스럽게도 이 Q&A에 기재되어 있는 모든 솔루션이 효과가 있는 것은 아닙니다.효과가 있었던 것은, 다음과 같습니다.

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^/?$ "https\:\/\/www\.example\.com\/" [R=301,L]
</IfModule>
# End Wordpress

위의 워드프레스 규칙은 다중 사용자 네트워크 모드에서 워드프레스를 위한 것입니다.Wordpress가 단일 사이트 모드인 경우 다음을 사용합니다.

# 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]

RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^/?$ "https\:\/\/www\.example\.com\/" [R=301,L]
</IfModule>
# End Wordpress

위의 어떤 것도 나에게는 통하지 않았다.하지만 이 대사들은 내 워드프레스 사이트에서도 같은 문제를 해결했다.

RewriteEngine On

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

http를 https로 리다이렉트하는 가장 쉬운 방법.word press https를 사용하여 site_url 및 home을 http://example.com에서https로 변경합니다.워드프레스가 리디렉션을 수행합니다.(따라서 "too many redirects" 오류가 발생하고 워드프레스는 http로 리다이렉트되며 .htaccess는 https로 리다이렉트 됩니다).

편집하지 않으려는 경우 사용할 수 있는 대체 솔루션을 소개합니다..htaccess:

add_action( 'template_redirect', 'nonhttps_template_redirect', 1 );

function nonhttps_template_redirect() {

    if ( is_ssl() ) {

        if ( 0 === strpos( $_SERVER['REQUEST_URI'], 'https' ) ) {

            wp_redirect( preg_replace( '|^http://|', 'https://', $_SERVER['REQUEST_URI'] ), 301 );

            exit();

        } else {

            wp_redirect( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 );

            exit();

        }

    }

}

테마 하단에 배치할 수 있습니다.functions.php

WordPress의 .htaccess 파일에 다음 내용을 추가합니다.

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

따라서 기본 WordPress의 .htaccess 파일은 다음과 같습니다.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

RewriteCond %{HTTP_HOST} ^yoursite.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.yoursite.com [NC]
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [L,R=301,NC]
</IfModule>
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^digitalsoftwaremarket.com [NC]
    RewriteRule ^(.*)$ http://www.digitalsoftwaremarket.com/$1 [L,R=301]
</IfModule>

위의 최종 .htaccess와 Test A,B,C,D,E는 나에게 효과가 없었습니다.아래 두 줄 코드를 사용했는데 WordPress 웹사이트에서 작동합니다.

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.thehotskills.com/$1 [R=301,L]

어디서 실수를 했는지 모르겠지만 이 페이지가 도움이 되었어요.

나한텐 안 통했어우선 프로바이더에서 SSL을 활성화하는 방법을 확인할 필요가 있었습니다..htaccess내 공급자가 주는 것

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{HTTP:HTTPS} !on
   RewriteRule (.*) https://%{SERVER_NAME}/$1 [QSA,L,R=301]
</IfModule>

하지만 며칠 동안 연구해야 했던 건wp-config.php제공된 사이트가 프록시 뒤에 있기 때문에 다음 행이 있습니다.

/**
 * Force le SSL
 */
define('FORCE_SSL_ADMIN', true);
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) $_SERVER['HTTPS']='on';

wordpress의 .htaccess 파일에서 이 코드를 추가하거나 바꾸기만 하면 됩니다.

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

http에서https://www로 리다이렉트 합니다.

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

이건 확실히 먹힐 거야!

이 코드를 추가하면 마법처럼 작동합니다.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST}#%{HTTPS}s ^www\.([^#]+)#(?:off|on(s)) [NC]
    RewriteRule ^ http%2://%1%{REQUEST_URI} [R=301,L]
</IfModule>

언급URL : https://stackoverflow.com/questions/32049820/use-htaccess-to-redirect-http-to-https

반응형