Сайт перенаправляет на неправильный URL при сохранении настроек.

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

У меня есть поддомен:

https://blog.example.com/

Я принудительно перенаправляю на подкаталог:

https://www.example.com/blog

Поменяв URL сайта и некоторые RewriteRule в .htaccess.

Теперь сайт и админка работают хорошо, за исключением маленькой проблемы: когда я пытаюсь нажать кнопку “сохранить” на странице настроек (например: Настройки > Написание), сайт перенаправляется на основной домен:

https://www.example.com/wp-admin/options-writing.php?settings-updated=true

/blog отсутствует в URL, и в итоге я попадаю на страницу 404 основного сайта.

Мой файл .htaccess выглядит следующим образом:

    # BEGIN WordPress

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{HTTP:X-Forwarded-Host}i ^example\.com
RewriteCond %{HTTP_HOST} ^blog\.example\.com$
RewriteRule ^/?(.*)$ https://www.example.com/blog/$1 [L,R=301,NC]

RewriteCond %{HTTP:X-Forwarded-Server}i !^www\.example\.com
RewriteCond %{HTTP_HOST} ^blog\.example\.com$
RewriteRule ^/?[0-9]{4}/[0-9]{2}/(.*)$ https://www.example.com/blog/$1 [L,R=301,NC]

RewriteCond %{HTTP:X-Forwarded-Server}i !^www\.example\.com
RewriteCond %{HTTP_HOST} ^blog\.example\.com$
RewriteRule ^/?(.*)$ https://www.example.com/blog/$1 [L,R=301,NC]

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*)$ https://www.example.com/blog/$1 [L,R=301,NC]


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

# END WordPress

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

# END WordPress

Когда я нажимаю кнопку “сохранить”, консоль выводит сообщение об ошибке:

/wp-admin/options-general.php?settings-updated=true:1 GET https://www.example.com/wp-admin/options-general.php?settings-updated=true 404 ()

Кто-нибудь может помочь разобраться с этой проблемой?

Обновленный рабочий .htaccess (согласно первому ответу):

<IfModule mod_rewrite.c>
RewriteEngine On

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

RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^/?(.*)$ https://www.example.com/blog/$1 [L,R=301,NC]
</IfModule>

Мой адрес WordPress и адрес сайта:

Адрес WordPress (URL) =   /blog
Адрес сайта (URL) = https://www.example.com/blog

По виду вашего .htaccess, кажется, что в нем слишком много пересекающихся правил. Вместо этого сделайте следующее:

  1. Сделайте резервную копию вашего текущего .htaccess, если вам нужно будет к нему вернуться
  2. Удалите ваш .htaccess с сервера, WordPress автоматически создаст для вас новый
  3. Откройте ваш новый файл .htaccess и добавьте следующее между тегами <IfModule mod_rewrite.c>:

.

RewriteCond %{HTTP_HOST} ^blog\.example\.com$
RewriteRule ^/?(.*)$ https://www.example.com/blog/$1 [L,R=301,NC]

Ваш .htaccess затем должен выглядеть следующим образом:

# 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]
# Custom rewrite
RewriteCond %{HTTP_HOST} ^blog\.example\.com$
RewriteRule ^/?(.*)$ https://www.example.com/blog/$1 [L,R=301,NC]
</IfModule>
# END WordPress

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

Проблема, с которой вы столкнулись, связана с перенаправлением сайта на неправильный URL после сохранения настроек на странице администрирования WordPress. Данная проблема может возникать по нескольким причинам, связанным с неправильной конфигурацией файла .htaccess и настройками URL в панели администрирования сайта. Ниже я предоставлю подробное объяснение, примеры, а также способы применения этого решения.

Теория

  1. Роль .htaccess:
    Файл .htaccess отвечает за управление перенаправлениями и конфигурацию сервера Apache. Этот мощный инструмент может сильно повлиять на работу вашего сайта, особенно когда речь идет о перенаправлениях и обработке URL.

  2. Общие причины ошибок перенаправления:

    • Конфликт между несколькими правилами в .htaccess.
    • Неверные настройки адреса сайта или адреса WordPress в админке.
    • Использование неправильных условий и правил в областях, учитывающих различные заголовки, такие как X-Forwarded-Host и X-Forwarded-Proto.
  3. Настройки URL:

    • WordPress разделяет понятия "Адрес WordPress" и "Адрес сайта", что помогает в случаях, когда сайт и файлы WordPress располагаются в разных местах. Неправильная настройка этих параметров может привести к некорректному поведению сайта.

Пример

В вашем случае файл .htaccess представляет собой запутанную последовательность инструкций, в которой, по-видимому, конфликты между различными правилами перенаправлений. Например, вы имеете несколько сегментов, начинающихся с RewriteCond и RewriteRule, которые кажутся дублирующимися. Эти конфликтные правила могут вводить сервер в заблуждение относительно того, какое именно правило использовать в конкретной ситуации.

Применение

  1. Резервное копирование текущего .htaccess:
    Перед тем как выполнять изменения, обязательно сделайте резервную копию текущего файла .htaccess. Это позволит вам вернуться к исходным настройкам в случае необходимости.

  2. Упрощение .htaccess:
    Удалите текущий файл .htaccess и позвольте WordPress создать новый, минимально необходимый, файл. Затем вручную добавьте только те правила, которые нужны для достижения вашей цели — перенаправления с поддомена на субдиректорию.

  3. Конфигурация .htaccess:
    Ваш новый .htaccess должен выглядеть следующим образом:

    # 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]
    # Custom rewrite
    RewriteCond %{HTTP_HOST} ^blog\.example\.com$
    RewriteRule ^/?(.*)$ https://www.example.com/blog/$1 [L,R=301,NC]
    </IfModule>
    # END WordPress

    Особое внимание здесь уделяется тому, чтобы правила касались только тех URL, которые вам действительно необходимо перенаправить.

  4. Настройки WordPress:
    Проверьте настройки в панели администрирования WordPress:

    • Адрес WordPress должен быть задан как /blog.
    • Адрес сайта должен быть https://www.example.com/blog.
  5. Проверка успешности изменений:
    Перезагрузите веб-сервер (если это требуется) и протестируйте функционал сохранения настроек. Перенаправление должно быть правильным, направляя вас обратно на https://www.example.com/blog/wp-admin/options-writing.php?settings-updated=true, как ожидалось.

Следуйте этим шагам для упрощения конфигурации вашего .htaccess и проверяйте правильность настроек URL. Это поможет избежать ненужных конфликтов и обеспечит корректную работу вашего сайта.

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

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