У меня есть два приложения для сборки 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.
Как это исправить.
Использование 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.
Я решил это так.
Я отредактировал файл конфигурации 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). Если вы использовали инструмент ИИ, чтобы помочь с этим ответом, я бы посоветовал вам удалить его. Читатели должны внимательно и критически просмотреть этот ответ, так как он может содержать фундаментальные ошибки и дезинформацию. Если вы наблюдаете проблемы с качеством и/или у вас есть основания полагать, что этот ответ был сгенерирован искусственным интеллектом, пожалуйста, оставьте соответствующий отзыв. Публикация контента, созданного искусственным интеллектом, здесь запрещена, и команда модераторов может использовать вашу помощь для выявления проблем с качеством.
Я пробовал так. Но я получил такую ошибку для пути
/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.