Вопрос или проблема
Я развернул свой сайт на WordPress в Google Cloud Compute Engine. Чтобы включить SSL, я следовал шагам, описанным здесь: https://www.onepagezen.com/free-ssl-certificate-wordpress-google-cloud-click-to-deploy
- Установить клиент Certbot
- Сгенерировать сертификаты
- Настроить сертификаты
- Включить перенаправление на HTTPS
- Перезапустить сервер Apache
- Обновить URL-адреса WordPress
- Настроить автоматическое обновление 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, если используется другая структура постоянных ссылок, кроме стандартной.
Анализ возможных причин
-
Ошибка в конфигурации Apache: Ваши изменения в конфигурационных файлах (
default-ssl.conf
иwordpress.conf
) могут влиять на работу "pretty permalinks". Убедитесь, что файлwordpress-http.conf
, который отвечает за работу постоянных ссылок, снова включен в конфигурацию. -
Проблемы с
.htaccess
: Файл.htaccess
, который находится в корне вашего WordPress, может быть настроен неправильно. -
Проблемы плагинов: Некоторые плагины могут вызывать перенаправление на HTTP, что вызывает 404 ошибку при работе с HTTPS.
Шаги по решению проблемы
-
Проверьте файл
.conf
и активируйте недостающие сайты:Выполните следующую команду, чтобы повторно активировать нужные конфигурации для WordPress:
sudo /usr/sbin/a2ensite wordpress-http sudo /usr/sbin/a2ensite wordpress-https sudo systemctl reload apache2
Это поможет восстановить корректную работу постоянных ссылок.
-
Проверьте файл
.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
-
Добавьте в
wp-config.php
:Если у вас используется балансировщик нагрузки, добавьте в файл
wp-config.php
следующую строку:$_SERVER['HTTPS'] = 'on';
Это даст WordPress знать, что все запросы должны обрабатываться через HTTPS.
-
Отключите все плагины временно:
Деактивируйте все плагины, кроме вашего SSL-плагина, чтобы исключить возможность их влияния на перенаправления.
-
Пересохраните постоянные ссылки:
В административной панели WordPress перейдите в "Настройки" -> "Постоянные ссылки" и просто нажмите кнопку "Сохранить изменения". Это позволит WordPress автоматически пересоздать его внутренние правила
.htaccess
.
Это руководство должно помочь вам решить проблему 404 ошибки на "pretty permalinks" при работе с HTTPS. Помните, что важно не только следовать указанным шагам, но и удостовериться, что изменения учтены в ваших адаптированных конфигурационных файлах. Если проблема сохраняется, пересмотрите ваши серверные настройки или обратитесь за профессиональной поддержкой.