source

wp-config를 사용하여 워드프레스로 SSL을 올바르게 강제합니다.php

factcode 2023. 3. 25. 11:55
반응형

wp-config를 사용하여 워드프레스로 SSL을 올바르게 강제합니다.php

wp-config.php다음 중 하나:

define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);

제 에는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.htaccess 및 를 웹: "www" 입니다.

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{SERVER_PORT} 80 [OR]
RewriteCond %{HTTP_HOST} ^website.com
RewriteRule ^(.*)$ https://www.website.com/$1 [L,R=301]

다른 리라이터가 있는 것은 알고 있습니다만, 어느 것이 올바른지 잘 모르겠습니다.

중 요?wp-config.php

1 - isset() 미포함(컬리 괄호 포함, server_port 포함)

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
    $_SERVER['HTTPS'] = 'on';
    $_SERVER['SERVER_PORT'] = 443;
}

2 - 대괄호 없음 및 server_port 없음

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
    $_SERVER['HTTPS'] = 'on';

3 - 괄호가 필요/더 좋습니까, 아니면 "더 정확한" 서버 포트가 필요합니까?

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
    $_SERVER['HTTPS'] = 'on';
    $_SERVER['SERVER_PORT'] = 443;
}

인터넷에서 워드프레스 SSL에 대해 조금 다른 변형을 몇 가지 발견했는데 어떤 것이 정확한지 알 수 없습니다.

이 경우 PHP 코드는 SSL을 처리할 필요가 없습니다.여기에서는 기존의 SoC 원칙을 적용합니다.만약 당신이 명시적으로 접속으로 동작하지 않는다면(WP에서는 동작하지 않는다), 당신은 프로토콜 체크를 웹 서버에 맡겨야 합니다.

또한 개서 규칙에서 포트를 정의하는 것도 피해야 합니다.다중 사이트 WP 설정을 사용하지 않는 경우 다음을 시도할 수 있습니다.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

이거 썼어.계속 진행해도 좋습니다.

if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
   $_SERVER['HTTPS']='on';

서버 포트가 443과 다를 경우 지정할 수 있습니다.그렇지 않으면 다시 사용할 필요가 없습니다.

수정된 .htaccess 규칙(wiki.apache.org 참조):

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://mysslcertdomainname.com/$1 [R,L]

통상 Wordpress에서는 코드 예시(1, 2, 3)가 필요하지 않지만, 질문에 근거한 프록시가 있는 것 같습니다.

  1. Not Good 다음과 같은 경우 PHP 경고(표준 php 구성)가 생성됩니다.HTTP_X_FORWARDED_PROTO는 웹 서버에 의해 설정되지 않습니다.
  2. 을 검사하기 전에 양호한 검사 변수가 있습니다.경고를 생성하지 않습니다.
  3. Good Best**

** 으로 변경 **의 _SERVER예: 수예:SERVER_PORT ★★★★★★★★★★★★★★★★★」HTTPS그다지 일반적인 설정이 아닌 경우(프록시 배후에 있는 경우 등)는 권장되지 않습니다.이것이 이 코드의 유일한 이유입니다.

이 코드를 함수에 사용합니다.php

add_action('template_redirect', 'f_force_ssl');

function f_force_ssl()
{
    if (!is_ssl()) 
    {
        wp_redirect('https://' . $_SERVER['HTTP_HOST'] . 
        $_SERVER['REQUEST_URI'], 301);
        exit();
    }
}

도커를 사용하여 수동 구성을 피하려면 다음과 같이 하십시오.

if ( getenv('ENABLE_HTTPS')  === "true" ) {
  define( 'FORCE_SSL_ADMIN', true );
  $_SERVER['HTTPS']='on';
}

새로운 변수 ENABLE_을 전달하기만 하면 됩니다.HTTPS

docker run -d --name wordpress -it --rm -p 80:80 \
-e DB_HOST=10.10.10.10:3306 \
-e DB_USER=root \
-e DB_PASSWORD=secret \
-e DB_NAME=wordpress \
-e AUTH_KEY=$RANDOM_KEY \
-e SECURE_AUTH_KEY=$RANDOM_KEY \
-e NONCE_KEY=$RANDOM_KEY \
-e LOGGED_IN_KEY=$RANDOM_KEY \
-e AUTH_SALT=$RANDOM_KEY \
-e SECURE_AUTH_SALT=$RANDOM_KEY \
-e LOGGED_IN_SALT=$RANDOM_KEY \
-e NONCE_SALT=$RANDOM_KEY \
-e WP_DEBUG=true \
-e DISABLE_WP_CRON=true \
-e ENABLE_HTTPS=true wordpress:5.7.2

는 행 할 가 있었습니다. if 스테이트먼트 행은, if 스테이트먼트 행은, 「if 스테이트먼트」의 경우입니다.$_SERVER['HTTPS']='on';

Zevenet CE 5.9를 사용하고 있습니다.이 경우 x-forwarded-for 또는 x-forwarded-proto 옵션이 없기 때문에 리버스 프록시의 배후에 https를 강제 적용합니다.

언급URL : https://stackoverflow.com/questions/31888405/correctly-force-ssl-on-wordpress-via-wp-config-php

반응형