Принудительный HTTPS с .htaccess на сайте с Wordpress в подпапке

4648
Jan Doggen

Я не могу заставить мой файл .htaccess работать, чтобы заставить трафик HTTPS

Структура сайта, которую я вижу, если я перехожу по FTP к своему хостинг-провайдеру:

/ domains mydomainname.com public_html blog 
  • Файлы для моего сайта начинаются с public_htmlindex.htmlт. Д.)
  • У меня есть установка WordPress в blog
  • Настройки Wordpress были установлены на https: (общие настройки упоминаются https://www.mydomainname.com/blogкак URL Wordpress).
  • SSL-сертификат работает нормально, если я захожу в домен
  • Первоначально было только .htaccessв blog, содержащий:

# НАЧАЛО WordPress

RewriteEngine В
RewriteBase / blog /
RewriteRule ^ index.php $ - [L]
RewriteCond% ! -F
RewriteCond% ! -D
RewriteRule. /blog/index.php [L]

# КОНЕЦ WordPress

Все виды учебников, которые я вижу, упоминают, что я должен добавить это в начало .htaccess:

RewriteEngine On RewriteCond % 80 RewriteRule ^(.*)$ https://www.mydomainname.com/$1 [R,L] 

... и что я должен поместить этот файл "в корень моего сайта".

Если у меня нет (другого) .htaccessфайла:

  • Я могу просмотреть перейти https://www.mydomainname.com, перейти по ссылкам в блоге WP и просмотреть там все https:
  • Если я зайду http://www.mydomainname.com, перейдите по ссылкам в блоге WP, они превратятся в https:

Если я размещаю измененный htaccess в нескольких местах, у меня возникают следующие проблемы (в зависимости от того, какое .htaccessсодержимое / места я пытаюсь использовать):

  • Если я перехожу на www.mydomainname.comнего, перенаправляет https://www.mydomainname.comи получает «Сервер не найден»; или же:
  • Без форсировки с http: на https:

Вопросы:

  • Должен ли он .htaccessбыть размещен в mydomainname.comили public_html(то есть, в какой папке находится этот знаменитый «корень моего сайта»)? Я пробовал оба.
  • Это должно также быть помещено в blog? Если да, то должны ли они быть идентичными?
  • Каково правильное содержание .htaccessфайла (ов)?

Я перепробовал все виды вариаций, но не могу заставить его работать - очевидно, еще не тот вариант.

FWIW: я предполагаю, что мой хостинг-провайдер использует Apache. Я не контролирую его конфигурацию.

1
Вы помните, что некоторые браузеры кэшируют веб-страницу, и поэтому .htaccess может не перенаправлять должным образом? Chrome особенно без ума от этого. Shift-F5 должен выполнить принудительную перезагрузку, но иногда даже это не работает, и вам действительно нужно очистить кеш через меню Chrome. Я был ошарашен, заставляя работать то же самое, и когда я попробовал это в другом браузере, и все это заработало, меня, наконец, поразило, что именно кеш играл мои шутки. LPChip 6 лет назад 0
Другая неудачная возможность состоит в том, что ваш провайдер может не разрешить `.htaccess` или может не разрешить все возможные функции. Это особенно верно для виртуального хостинга, где веб-сайты нескольких клиентов размещаются на одном сервере. jpaugh 6 лет назад 0
@LPChip Я перезагружаю браузер (и я жду) Jan Doggen 6 лет назад 0
@jpaugh Мой провайдер разрешает htaccess. На одной из их страниц поддержки упоминаются эти три строки и фраза «в главной папке вашего сайта». Jan Doggen 6 лет назад 0
@JanDoggen Перезапуска браузера недостаточно для очистки кэша. Shift + F5 должен сделать это; Вы также можете попробовать использовать другой браузер, который вы обычно не используете; или вы можете попробовать очистить кеш. [Вот приложение] (https://chrome.google.com/webstore/detail/clear-cache/cppjkneekbjaeellbfkmgnhonkkjfpdn), которое делает это удобно. Отказ от ответственности: никогда не использовал его. jpaugh 6 лет назад 0
@jpaugh Я попробовал все это; в том числе Ctrl-F5. Мои тесты также распространялись на несколько дней, новые сертификаты и т. Д. Jan Doggen 6 лет назад 0

2 ответа на вопрос

1
wp78de

Я бы сказал, что вы должны поместить новый файл .htaccess в папку public_html.

Попробуйте следующее с mod_rewrite в вашем файле .htaccess

RewriteEngine On # This will enable the Rewrite capabilities RewriteCond % !=on # This checks to make sure the connection is not already HTTPS RewriteRule ^/?(.*) https://%/$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 

Эти три строки также необходимо добавить к файлу .htaccess в blogпапке, изменив его так, RewriteRuleчтобы он отражал эту подпапку:

RewriteRule ^/?(.*) https://%/blog/$1 [R,L] 

Также может быть полезно применить mod_ssl для принудительного использования SSL с помощью директивы SSLRequireSSL :

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

Это в основном это. Я добавил, что * также * нужно сделать, в файл .htaccess в подпапке блога. Jan Doggen 6 лет назад 0
0
harrymc

Это краткое изложение статьи « Принудительное использование HTTPS на всех страницах вашего сайта WordPress», в которой описывается, как сделать весь блог WordPress безопасным с помощью HTTPS.

  1. Принудительно использовать SSL для администратора и страниц входа.
    Добавьте следующую строку в wp-config.phpфайл в корне каталога WordPress:
    define('FORCE_SSL_ADMIN', true);

  2. Установите протокол HTTPS в настройках
    в панели инструментов администратора WordPress, перейдите Settings -> Generalи изменить оба адреса, чтобы иметь, https://а не http://:

  3. Обновите .htaccess
    Добавьте правила перезаписи в .htaccessфайл, найденный в корне приложения WordPress:

    <IfModule mod_rewrite.c> RewriteEngine On RewriteCond % !^443$ RewriteRule (.*) https://%% [R=301,L] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond % !-f RewriteCond % !-d RewriteRule . /index.php [L] </IfModule> 

Были добавлены две строки, в которых говорилось, что если текущий порт не 443, перепишите URL-адрес, чтобы использовать HTTPS с перенаправлением 301:

RewriteCond % !^443$ RewriteRule (.*) https://%% [R=301,L] 
  1. Очистите все кэши для вашего приложения

Похожие вопросы