Обработка маршрутизации URL с помощью Apache и React Router - PullRequest
1 голос
/ 22 июня 2019

У меня есть пара приложений, которые будут работать на общем хосте Apache.Приложения размещаются в общем каталоге на сервере.Каждое приложение размещено в каталоге «build» в его главном каталоге.Каталог client должен отображаться по умолчанию, а admin должен отображаться по адресу example.com/app/admin.И, чтобы еще больше усложнить ситуацию, admin использует React Router для внутренней маршрутизации.

Вот визуальное представление цели:

admin
|- build
   |- index.html (example.com/app/admin, example.com/app/admin/page1, etc.)
client
|- build
   |- index.html (example.com/app)
.htaccess

Так что мне нужно загрузить целевые страницы, покатакже позволяет React Router обрабатывать маршрутизацию для admin.Я пробовал все комбинации RewriteCond и RewriteRule, о которых я могу подумать в .htaccess, но пока не повезло.Я чувствую, что приближаюсь к правилам ниже, но я все еще не совсем там.

// .htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/admin/build
RewriteRule ^admin$ admin/build [L]

RewriteCond %{REQUEST_URI} !^(/client/build|/admin)
RewriteRule ^(.*)$ client/build [L]
</IfModule>

Это показывает / строит в адресной строке, и любой запрос к /admin/(.*) не удается перенаправить запросы файлов .css и .js в папку сборки (поэтому вместо этого он ищет / admin / static / css / вместо / admin / build / static / css), хотя они успешно загружаются при запросах к /admin.

РЕДАКТИРОВАТЬ: «App1» изменен на «client», а «App2» на «admin»;маскировка этих файлов не имеет смысла, и тот факт, что каталог имеет общее имя со страницей, может как-то иметь значение.

1 Ответ

0 голосов
/ 01 июля 2019

Наконец-то с этим разобрались. Окончательный переписать ниже.

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_URI} -f
RewriteRule .* - [L]

RewriteCond %{REQUEST_URI} !^/app/admin [OR]
RewriteCond %{REQUEST_URI} ^/app/admin/build
RewriteRule .* - [S=2]
RewriteRule admin/\w*/?$ admin/build/index.html [L]
RewriteRule admin/(.+)$ admin/build/$1 [L]

RewriteCond %{REQUEST_URI} !^(?:/app/client/build|/app/admin/build)
RewriteRule ^(.*)$ client/build/$1 [L]
</IfModule>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...