.htaccess и настройки прокси для маршрутизации декомпозированного REST API, потребляющего тему

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

Разработка отсоединенного фронтенда, использующего REST API…

Я использую create-react-app, поэтому могу ввести поле proxy, соответствующее WP, в моем package.json, и писать свои вызовы как fetch('/wp-json/v2/pages/...'), если я запускаю yarn start из директории фронтенда…

Хотелось бы на самом деле иметь эту тему в директории wp-content/themes/my-theme

Я не бог в .htaccess

Как мне сделать так, чтобы:

  • Общие запросы, такие как mysite.com/jibble/jabble, обрабатывались моим маршрутизацией SPA
  • Защищенные маршруты, такие как mysite.com/wp-admin/* и mysite.com/wp-content/uploads/*, по-прежнему обрабатывались Apache

Хорошо, это, вероятно, немного лишнего, но это работает для меня:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^static/(.*)$ /wp-content/themes/MYTHEME/static/$1 [R=301,NC,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

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

Настройки .htaccess и прокси для маршрутизации декомпозированного REST API в вашей теме WordPress

Введение

Использование создания фронтенда с помощью create-react-app в контексте декомпозированной архитектуры — это идеальный способ добиться гибкости и производительности в разработке приложений. Однако, действия требуют корректной настройки .htaccess и прокси, чтобы обеспечить правильную маршрутизацию как для клиентских запросов, так и для ресурсов WordPress. В этом руководстве мы разберем, как сделать так, чтобы ваши запросы к API корректно обрабатывались, одновременно позволяя вашему одностраничному приложению (SPA) управлять маршрутизацией на стороне клиента.

Настройки .htaccess

Ваш файл .htaccess является важным инструментом для настройки правил маршрутизации в Apache. Ваша цель заключается в том, чтобы перенаправить определенные запросы на ваше приложение React, а также оставить в силе возможности работы WordPress. Приведенный ниже код .htaccess будет служить основой для вашей настройки:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# Перенаправление статических ресурсов на директорию темы
RewriteRule ^static/(.*)$ /wp-content/themes/my-theme/static/$1 [R=301,NC,L]

# Исключение для index.php
RewriteRule ^index\.php$ - [L]

# Условия для проверки существования файла или директории
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Перенаправление всех остальных запросов на index.php
RewriteRule . /index.php [L]
</IfModule>

Объяснение правил

  1. Включение модуля mod_rewrite: RewriteEngine On включает систему перенаправлений Apache, которая позволяет изменять URL в зависимости от заданных правил.

  2. Правило для статических ресурсов: RewriteRule ^static/(.*)$ /wp-content/themes/my-theme/static/$1 [R=301,NC,L] перенаправляет запросы к статическим файлам, хранящимся в вашей теме, что позволяет удобно организовать ресурсы вашего SPA.

  3. Исключение для index.php: RewriteRule ^index\.php$ - [L] обеспечивает работу стандартного механизма маршрутизации WordPress, позволяя ему обрабатывать запросы к страницам и постам.

  4. Проверка существования файла или директории: Условия RewriteCond идентифицируют, не являются ли запрашиваемые ресурсы фактическими файлами или директориями. Если ни один из этих условий не соответствует, запрос будет перенаправлен.

  5. Перенаправление на index.php: RewriteRule . /index.php [L] устанавливает маршрут для всех остальных запросов, направляя их на ваше React-приложение, что позволяет вашему SPA обрабатывать их на клиентской стороне.

Настройки прокси в create-react-app

Вы упомянули, что планируете использовать поле proxy в вашем файле package.json. Отметим, что это критически важно для корректной работы API, вызываемых из вашего React-приложения:

{
  "proxy": "http://mysite.com"
}

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

Защита административных маршрутов

Чтобы ваши защищенные маршруты, такие как mysite.com/wp-admin/* и mysite.com/wp-content/uploads/*, оставались доступными только для Apache, убедитесь, что у вас нет конфликтов с написанными правилами в .htaccess. Данный шаблон гарантирует, что эти маршруты будут обработаны сервером Apache, а не вашим SPA.

Заключение

С этими настройками ваш проект будет готов к работе с декомпозированной архитектурой содержимого, обеспечивая эффективность и защиту. Подобная маршрутизация создает отличные условия для разработки с использованием React и WordPress, что позволяет достичь целей современного веб-разработчика. Убедитесь, что вы тестируете все настройки на локальном окружении перед развертыванием на продакшене, чтобы избежать непредвиденных ошибок.

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

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