Как развернуть два приложения для сборки в одном домене с помощью .htaccess

У меня есть два приложения для сборки vite.

Я собираюсь развернуть их в том же домене.

Например, если URL-адрес запроса «https://example.com/admin/*», я должен показать app1, а для других URL-адресов я должен показать app2.

Поэтому я настроил файл .htaccess следующим образом.

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On
    # For URIs starting with /admin, load the app in admin directory
    RewriteCond %{REQUEST_URI} ^/admin [NC]
    RewriteRule ^(.*)$ /admin/index.html [L]

    # For all other URIs, load the app in html directory
    RewriteCond %{REQUEST_URI} !^/admin [NC]
    RewriteRule ^(.*)$ /index.html [L]
</IfModule>

И я использую nginx, и файл конфигурации nginx выглядит так.

        root /var/www;
        location / {
            try_files $uri.html $uri $uri/ /html/index.html;
         }

Приложение1 находится в каталоге /var/www/html/admin, а приложение2 — в каталоге var/www/html.

Но я получил ошибку 404 для /admin/* URL.

Как это исправить.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
4
0
116
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Использование htaccess с nginx, как правило, не лучшая идея (см. здесь: «Вы не можете этого делать. Вы не должны. Если вам нужен .htaccess, вы, вероятно, делаете это неправильно».). Вы можете легко добиться желаемого результата, добавив:

root /path/to/your/root/directory;

location /admin/ {
    alias /path/to/app1/build/;
    try_files $uri $uri/ /index.html;
}

location / {
    alias /path/to/app2/build/;
    try_files $uri $uri/ /index.html;
}

в ваш конфигурационный файл nginx. Вы также можете использовать конвертер htaccess в nginx если у вас есть какие-либо другие правила htacess, которые вы хотите перенести на nginx.

Я пробовал так. Но я получил такую ​​​​ошибку для пути /admin. Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "text/html". Strict MIME type checking is enforced for module scripts per HTML spec.

BTSM 29.05.2023 02:00

Я решил это так.

Я отредактировал файл конфигурации nginx следующим образом.

      location /admin/ {
               alias /var/www/html/admin/;
               try_files $uri.html $uri $uri/ /admin/index.html;
       }

        location / {
            root /var/www/html/;
            try_files $uri.html $uri $uri/ /index.html;
         }

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

vite build --base=/admin/
Ответ принят как подходящий

Чтобы исправить ошибку 404, с которой вы сталкиваетесь при доступе к URL-адресам, начинающимся с /admin/*, вам необходимо настроить конфигурацию Nginx. Вот обновленная конфигурация, которая должна решить проблему:

root /var/www;

location /admin {
    alias /var/www/html/admin;
    try_files $uri $uri/ /admin/index.html;
}

location / {
    try_files $uri $uri.html $uri/ /index.html;
}

В обновленной конфигурации:

  • Блок местоположения /admin обрабатывает запросы на URL-адреса, начинающиеся с /admin. Он использует директиву псевдонима, чтобы указать правильный путь к каталогу для app1, расположенного в /var/www/html/admin. Директива try_files используется для проверки того, существует ли запрошенный URI в виде файла или каталога. В противном случае он будет служить /admin/index.html, который является точкой входа для app1.

  • Блок /location обрабатывает запросы для всех остальных URL-адресов. Директива try_files проверяет, существует ли запрошенный URI в виде файла с добавленным к нему .html, в виде каталога или в противном случае служит /index.html, который является точкой входа для app2.

Обновив конфигурацию Nginx, как показано выше, вы сможете правильно направлять запросы к соответствующим приложениям на основе пути URL.

Вероятно, это было написано (полностью или частично) искусственным интеллектом (например, ChatGPT). Если вы использовали инструмент ИИ, чтобы помочь с этим ответом, я бы посоветовал вам удалить его. Читатели должны внимательно и критически просмотреть этот ответ, так как он может содержать фундаментальные ошибки и дезинформацию. Если вы наблюдаете проблемы с качеством и/или у вас есть основания полагать, что этот ответ был сгенерирован искусственным интеллектом, пожалуйста, оставьте соответствующий отзыв. Публикация контента, созданного искусственным интеллектом, здесь запрещена, и команда модераторов может использовать вашу помощь для выявления проблем с качеством.

NotTheDr01ds 02.06.2023 19:26

Другие вопросы по теме