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)가 필요하지 않지만, 질문에 근거한 프록시가 있는 것 같습니다.
- Not Good 다음과 같은 경우 PHP 경고(표준 php 구성)가 생성됩니다.
HTTP_X_FORWARDED_PROTO
는 웹 서버에 의해 설정되지 않습니다. - 값을 검사하기 전에 양호한 검사 변수가 있습니다.경고를 생성하지 않습니다.
- 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
'source' 카테고리의 다른 글
리액트 라우터 v6에서 리다이렉트하려면 어떻게 해야 하나요? (0) | 2023.03.25 |
---|---|
Angular에서 브로드캐스트 이벤트를 테스트하려면 어떻게 해야 합니까?JS (0) | 2023.03.25 |
MongoDB에서 컬렉션을 CSV로 내보내려면 어떻게 해야 합니까? (0) | 2023.03.25 |
AngularJS 글로벌http 폴링 서비스 (0) | 2023.03.20 |
@RequiredArgsConstructor(onConstructor = @_(@Autowired)에 수식자를 추가할 수 있습니까? (0) | 2023.03.20 |