конфигурация apache для react-маршрутизатора с подкаталогом browserHistory и baseName

#apache #mod-rewrite #react-router

#apache #переписать мод #react-маршрутизатор

Вопрос:

Мое приложение находится в подкаталоге основного веб-сайта. Я реализовал basename и browserHistory и поместил следующий рекомендуемый код перезаписи apache в .htaccess в папке приложения:

 RewriteEngine On
RewriteBase /
RewriteRule ^index.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.html [L]
  

Эта рекомендуемая перезапись apache работает для возврата URL-адресов browserHistory в приложение index.html . По какой-то причине (см. Ниже) он не находит «style.css» и «brundle.js » которые ВСТРОЕНЫ в индексную страницу HTML. Единственное, что я вижу, что у меня другое в файле example .htaccess, это то, что у меня есть значение RewriteBase «/ react_librivox_search», потому что мое приложение находится в этой подпапке сайта.

 RewriteBase /react_librivox_search
  

Я тестировал, используя различные начальные и конечные косые черты для путей и файлов в .htaccess, и проблема не в этом.

Проблема, по-видимому, заключается в том, что приложение react устанавливает значение GET для файлов, которое включает часть переменной PATH, которая предположительно является только частью определения react-router:

 <Route path="/book/:id" component={BookDataDisplay}/>
  

Обратите внимание, что дополнительный сегмент пути «/ book/» добавляется к базовому URL, и когда файлы не найдены в ЭТОМ каталоге (который на самом деле не существует), сервер возвращает «index.html » для отсутствующих файлов, что объясняет ошибку mime-типа для librivox_search.cssфайл и ошибка «<» для bundle.js досье.

 The stylesheet http://jstest.dd:8083/react_librivox_search/book/librivox_search.css was not loaded because its MIME type, “text/html”, is not “text/css”.       librivox_search.css (embedded in index.html)

SyntaxError: expected expression, got '<'       bundle.js (embedded in index.html)
  

Такое же неожиданное добавление «книги» к URL-адресу работает и здесь. Ни один из встроенных index.html файлы находятся в этом подкаталоге. Но я хочу сохранить эту «книгу» в пути, поскольку она определяет, какие данные передаются на маршрут . , , что отличает его от других типов данных. Я просто не хочу, чтобы он отправлялся на СЕРВЕР (но, возможно, этого нельзя избежать), поскольку фактический index.html встроенных файлов там нет.

Я полагаю, что перезапись «/ react_librivox_search / book» как «/ react_librivxo_search» может сработать, но, похоже, это хакерский способ сделать это. И я не хочу ставить дубликат bundle.js файлы в нескольких каталогах (это работает, но какой это был бы кошмар обслуживания и, без сомнения, плохая практика).

Или рекомендуется поместить отдельный .htaccess в НАСТОЯЩУЮ подпапку «book», которая возвращает «librivox_search.css» и «bundle.js » (в базовом каталоге) в зависимости от запроса файла?