Вопрос или проблема
Я только что обновил свой сайт на WordPress до полного SSL-сертификата. Все работает, как и ожидалось. Только одна проблема, которую я не могу решить.
После обновления я заметил, что главная страница переходит как и ожидалось, но все подпостраничные ссылки перенаправлены на главную страницу.
http://www.example.com
перенаправляется наhttps://www.example.com
http://example.com
перенаправляется наhttps://www.example.com
http://www.example.com/page
перенаправляется наhttps://www.example.com
(я хотел бы, чтобы это былоhttps://www.example.com/page
)
Я использую свой файл .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 %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]
</IfModule>
Вы поместили перенаправление с HTTP на HTTPS (и каноническое www) не в то место. Оно должно идти до контроллера front-end WordPress. На самом деле, оно должно идти до секции # BEGIN WordPress
, чтобы избежать возможности перезаписи WordPress в будущих обновлениях.
Честно говоря, меня немного удивляет, что это перенаправление вообще что-то делает (кроме запросов на статические ресурсы)? (Может быть, вы видите кэшированное перенаправление, или, может быть, сам WP позже перенаправляет на главную страницу?)
Например:
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]
# 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]
</IfModule>
# END WordPress
Это перенаправление в конечном итоге должно быть 301 (постоянным) перенаправлением. Поэтому измените R
на R=301
, как только вы подтвердите, что оно работает нормально.
Ответ или решение
Если ваш сайт на WordPress продолжает перенаправлять внутренние страницы на главную, когда вы пытаетесь использовать HTTPS, это может быть вызвано неправильным размещением правил перенаправления в файле .htaccess
. Чтобы исправить эту ошибку, необходимо внести несколько изменений в конфигурацию вашего сайта.
Установка SSL-сертификата и пересылка
Вы правильно обновили ваш сайт, установив SSL-сертификат, и видите, что главная страница корректно перенаправляется на HTTPS. Однако проблема заключается в том, что внутренние страницы перенаправляются на главную страницу вместо того, чтобы корректно открываться при использовании HTTPS.
Проблема с файлом .htaccess
Ваш текущий файл .htaccess
содержит секцию для перенаправления HTTP на HTTPS, но она расположена после блока, который отвечает за маршрутизацию WordPress. Это приводит к тому, что запросы на внутренние страницы обрабатываются сначала 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 %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]
</IfModule>
Вам нужно переместить правило переадресации выше, чтобы оно срабатывало до выполнения правил WordPress. Также, стоит добавить код для постоянного перенаправления 301.
Исправленный файл .htaccess
Используйте следующий формат для вашего файла .htaccess
:
<IfModule mod_rewrite.c>
RewriteEngine On
# Перенаправление HTTP на HTTPS и канонизация www
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R=301]
# BEGIN WordPress
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
</IfModule>
Подробности о перенаправлении
-
Перемещение правил: Правила для перенаправления были перемещены перед блоком
# BEGIN WordPress
, что гарантирует, что WordPress не будет вмешиваться в процесс перенаправления. -
Постоянное перенаправление: Изменено
R
наR=301
, что указывает на постоянное перенаправление. Это полезно для SEO, так как поисковики будут знать, что старые URL больше не существуют. -
Кэширование: Если после изменения ваших правил всё еще наблюдаются проблемы, убедитесь, что нет кэширования на стороне браузера или на уровне сервера (например, плагинов кэширования WordPress).
-
Кэш браузера: Очистите кэш браузера и проверьте состояние ваших внутренних страниц.
Заключение
После внесения этих изменений ваши подстраницы должны начать корректно перенаправляться на схему HTTPS без перенаправления на главную страницу. Это не только улучшит пользовательский опыт, но и поможет сохранить положительное влияние на SEO вашего сайта. Если вы столкнетесь с дальнейшими проблемами, стоит проверить настройки ваших плагинов и проконсультироваться с технической поддержкой хостинга.