Ошибка 404 на красивых постоянных ссылках при обслуживании через HTTPS

Вопрос или проблема

Я развернул свой сайт на WordPress в Google Cloud Compute Engine. Чтобы включить SSL, я следовал шагам, описанным здесь: https://www.onepagezen.com/free-ssl-certificate-wordpress-google-cloud-click-to-deploy

  1. Установить клиент Certbot
  2. Сгенерировать сертификаты
  3. Настроить сертификаты
  4. Включить перенаправление на HTTPS
  5. Перезапустить сервер Apache
  6. Обновить URL-адреса WordPress
  7. Настроить автоматическое обновление SSL

Отредактировать /etc/apache2/sites-available/default-ssl.conf

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        <Directory /var/www/html>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            Allow from all
            Require all granted
        </Directory> 
    ...

и /etc/apache2/sites-available/wordpress.conf

<VirtualHost *:80>

  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/html
  ServerName mydomain.com
  ServerAlias mydomain.com
  Redirect permanent / https..mydomain.com

  <Directory />
    Options FollowSymLinks
    AllowOverride None
  </Directory>

  <Directory /var/www/html/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
  <Directory "/usr/lib/cgi-bin">
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/error.log
  # Возможные значения: debug, info, notice, warn, error, crit,
  # alert, emerg.
  LogLevel warn
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

После настройки всего я выполняю:

sudo a2ensite default-ssl
sudo a2enmod ssl
sudo service apache2 restart

SSL работает хорошо для бэкенда и главной страницы. Однако для всех других страниц я получаю 404. Когда я переключаюсь с пользовательских постоянных ссылок на простые постоянные ссылки, страницы снова становятся доступными. Есть идеи, что может быть причиной проблемы?

Это довольно распространенная проблема. К сожалению, существует множество возможных причин, которые могут быть как на уровне сервера, так и на уровне WordPress. Поэтому невозможно указать вам точное решение.

Одно, что вы знаете, это то, что настройки сервера, которые вы упоминаете, работают правильно хотя бы частично, в том смысле, что они читают файл .htaccess WordPress, потому что именно там хранятся перенаправления для красивых постоянных ссылок. Тем не менее, могут быть проблемы, если где-то на пути есть перенаправление на http, которое сервер может отказаться обслуживать (это, кажется, проблема с сервисом Google).

Любые проблемы, связанные с сервером, не обсуждаются здесь, но есть несколько вещей на уровне WordPress, которые вы могли бы попробовать:

  • Отключите все плагины (кроме SSL-плагина) и сохраните постоянные ссылки снова. Это гарантирует, что никакие плагины не перенаправляют на http
  • Убедитесь, что в подкаталогах нет файлов .htaccess, случайно перенаправляющих на http.
  • Добавьте $_SERVER['HTTPS']='on'; в ваш файл config.php, чтобы сообщить WordPress, что он должен обслуживать все страницы с https. Иногда настройка сервера настолько сложна, что WordPress не может сам это определить.
  • Кроме того, заставьте весь свой домен использовать https с помощью этих строк в .htaccess:

    RewriteEngine On

    RewriteCond %{HTTPS} !=on

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

Если у вас есть балансировщик нагрузки, попробуйте добавить следующую строку в wp-config.php

$_SERVER['HTTPS']='on';

Я только что столкнулся с точно такой же проблемой с Certbot и GCE, и мне удалось ее решить. Когда вы позволили Certbot обновить конфигурации Apache, он отключает все сайты, кроме тех, которые вы указали как нуждающиеся в сертификате. В частности, это отключает wordpress-http.conf, который является конфигурацией, позволяющей работать красивым постоянным ссылкам. Чтобы решить проблему, выполните:

% sudo /usr/sbin/a2ensite wordpress-http
% sudo /usr/sbin/a2ensite wordpress-https
% sudo systemctl reload apache2

Это должно снова заставить работать ваши подстраницы и API.

Ответ или решение

Если вы столкнулись с проблемой, когда на вашем сайте WordPress, развернутом на Google Cloud Compute Engine, происходит ошибка 404 для "pretty permalinks" при работе с HTTPS, то вот подробное руководство по решению этой проблемы.

Описание проблемы

Вы настроили SSL-сертификат, следуя этапам, упомянутым в руководстве OnePageZen. Однако после выполнения этих шагов страницы вашего сайта, кроме главной и административной, возвращают ошибку 404, если используется другая структура постоянных ссылок, кроме стандартной.

Анализ возможных причин

  1. Ошибка в конфигурации Apache: Ваши изменения в конфигурационных файлах (default-ssl.conf и wordpress.conf) могут влиять на работу "pretty permalinks". Убедитесь, что файл wordpress-http.conf, который отвечает за работу постоянных ссылок, снова включен в конфигурацию.

  2. Проблемы с .htaccess: Файл .htaccess, который находится в корне вашего WordPress, может быть настроен неправильно.

  3. Проблемы плагинов: Некоторые плагины могут вызывать перенаправление на HTTP, что вызывает 404 ошибку при работе с HTTPS.

Шаги по решению проблемы

  1. Проверьте файл .conf и активируйте недостающие сайты:

    Выполните следующую команду, чтобы повторно активировать нужные конфигурации для WordPress:

    sudo /usr/sbin/a2ensite wordpress-http
    sudo /usr/sbin/a2ensite wordpress-https
    sudo systemctl reload apache2

    Это поможет восстановить корректную работу постоянных ссылок.

  2. Проверьте файл .htaccess:

    Убедитесь, что ваш файл .htaccess содержит стандартные строки для WordPress:

    # 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
  3. Добавьте в wp-config.php:

    Если у вас используется балансировщик нагрузки, добавьте в файл wp-config.php следующую строку:

    $_SERVER['HTTPS'] = 'on';

    Это даст WordPress знать, что все запросы должны обрабатываться через HTTPS.

  4. Отключите все плагины временно:

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

  5. Пересохраните постоянные ссылки:

    В административной панели WordPress перейдите в "Настройки" -> "Постоянные ссылки" и просто нажмите кнопку "Сохранить изменения". Это позволит WordPress автоматически пересоздать его внутренние правила .htaccess.

Это руководство должно помочь вам решить проблему 404 ошибки на "pretty permalinks" при работе с HTTPS. Помните, что важно не только следовать указанным шагам, но и удостовериться, что изменения учтены в ваших адаптированных конфигурационных файлах. Если проблема сохраняется, пересмотрите ваши серверные настройки или обратитесь за профессиональной поддержкой.

Оцените материал
Добавить комментарий

Капча загружается...