2015-09-30 2 views
0

У нас есть сайт WordPress и используется для получения сертификата SSL. Сайт использовался для всех HTTPS, и теперь нам больше не нужен SSL, поэтому мы позволяем ему истекать.WordPress перенаправить все HTTPS на HTTP

Мы уже изменили адрес сайта и WordPress Адрес в панели администратора, чтобы быть http://example.com.

У нас есть несколько ссылок в дикой природе, которые ссылаются на нас с https://, и если пользователь обращается к сайту с https://, сайт разбивается или пользователь получает предупреждение в своем браузере.

Подводя итог, нам необходимо перенаправить все https:// трафик на http://.

Я пытался несколько плагинов (без везения):

и даже не изменил файл .htaccess (до сих пор не повезло)

<IfModule mod_rewrite.c> 
RewriteEngine On 

RewriteCond %{SERVER_PORT} ^443$ 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L] 

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

Не конечно, что еще мне нужно сделать.

ответ

6

Проблема заключается в том, что перед вступлением Apache или WordPress браузеру необходимо установить соединение с сервером через HTTPS, подключив его, выполнив SSL-квитирование, обменяв (и проверив) сертификаты и только после того, как все это будет сделано, браузер выдаст HTTP-запрос, который сообщает серверу, какие ресурсы он ищет.

Из-за этого плагин .htaccess или WordPress не сможет перенаправить пользователя без установления безопасного сеанса.

Конечно, если вы устанавливаете самозаверяющий сертификат, пользователю будет представлено предупреждение перед тем, как это произойдет. Если вы случайно (который, похоже, не является актером) отправляли заголовки Strict Transport Security по https, тогда браузеры предыдущих посетителей могут даже не разрешать им подключаться через HTTP.

Если вы хотите перенаправить HTTPS-трафик на HTTP, к сожалению, вам придется получить действительный сертификат и перенаправить с использованием .htaccess или некоторого PHP-кода, как вы.

Если вы ищете сертификаты, которым доверяют большинство браузеров без оплаты, вы можете получить бесплатный сертификат от Let's Encrypt.

Если вы хотите без проблем перенаправить HTTPS-трафик на HTTP без каких-либо предупреждающих сообщений, вам необходимо установить другой сертификат SSL из доверенного центра сертификации.

-2

Это отключает протокол HTTPS полностью


    <IfModule mod_rewrite.c> 
     RewriteEngine On 
     RewriteCond %{HTTPS} off 
    </IfModule> 

Это оставляет HTTPS включен, а затем использует сервер VARIABLES для перенаправления всех страниц HTTP:


    <IfModule mod_rewrite.c> 
     RewriteEngine On 
     RewriteCond %{HTTPS} on 
     RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} 
    </IfModule> 

Надеется, что это помогает вам ....

+2

Это, к сожалению, не поможет с ошибками, которые клиенты получат при подключении из-за истекшего или недействительного сертификата. Для этого необходимо установить действующий SSL-сертификат. – drew010

+1

«Это полностью отключает https» - этот фрагмент недействителен и ничего не сделает - в нем отсутствует директива «RewriteRule». Фактически, следующая директива 'RewriteRule' в файле будет _caught_, так что это может даже сломать что-то. – MrWhite

1

Выберите альтернативное решение, которое вы можете использовать, если не хотите редактировать .htaccess:

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

function nonhttps_template_redirect() { 

    if (is_ssl() && !is_admin()) { 

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

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

      exit(); 

     } else { 

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

      exit(); 

     } 

    } 

} 

Вы можете поместить это в нижней части вашей темы functions.php

+3

Как упоминалось ранее, как это помогает, если сертификат SSL не существует или недействителен («мы разрешаем ему истекать»)? (См. Ответ [@ drew010] (https://stackoverflow.com/a/32855990/369434)) – MrWhite

+0

@MrWhite см. Мой ответ на этой же странице здесь: https://stackoverflow.com/a/47399052/6647188 –

+0

Вы должен избегать глобальных переменных, таких как $ _SERVER ['REQUEST_URI'], используя esc_url для предотвращения любых видов эксплойтов. – WPExplorer

0

Расширяя @HigherCoding «s ответ и @MrWhite» s комментарий, чтобы получить функцию PHP, чтобы сделать это на месте, где https порт существует, но сертификация SSL является недопустимой, истекли или несуществующие:

function shapeSpace_check_https() { 
if ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443) { 
    return true; 
} 
    return false; 
} 


function bhww_ssl_template_redirect() { 
if (shapeSpace_check_https()) { 
    if (0 === strpos($_SERVER['REQUEST_URI'], 'http')) {  
     wp_redirect(preg_replace('|^(https://)|', 'http://', $_SERVER['REQUEST_URI']), 301); 
     exit(); 
    } else { 
     wp_redirect('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301); 
     exit();  
    } 
} 
} 

add_action('template_redirect', 'bhww_ssl_template_redirect'); 

Это работало на моем сайте в functions.php и был сочетанием этих двух источников: Source 1 и Source 2.

Как указано в @ drew010 - это все равно не помешает страшному приглашению для пользователей, которые вводят https как часть вашего URL-адреса. Но он перенаправит их на http, если они поспеют через страшную подсказку, что маловероятно. Похоже, что получение SSL-сертификата, вероятно, является лучшим вариантом по этой причине, для общей безопасности и для увеличения рейтинга Google в настоящее время & в будущем.

+1

Вы должны избегать глобальных переменных, таких как $ _SERVER ['REQUEST_URI'], используя esc_url для предотвращения любых видов эксплойтов. – WPExplorer

+1

@WPExplorer, спасибо за совет - я обновлю свой ответ, как только я это реализую. –

Смежные вопросы